7

mylayoutfile.xml

 <layout>
        <default>
            <reference name="header">
                <block type="mynamespace_mymodule/view" name="mynamespace_mymodule" output="toHtml" template="mymodule/html/view.phtml">
                    <action method="setTest"><param1>myparam1</param1><param2>myparam2</param2></action>
                </block>
            </reference>
        </default>
    </layout>

アプリ/コード/ローカル/Mynamespace/Mymodule/Block/View.php

    class Mynamespace_Mymodule_Block_View extends Mage_Core_Block_Template{
        public $test = "before any params";
            public function setTest($passedparam1,$passedparam2){
             $this->test = $passedparam1 ." ". $passedparam2;
            }

}

アプリ/デザイン/.../.../mymodule/html/view.phtml

<?php
echo "<pre>";
print_r($this->test);  //myparam1 myparam2
echo"</pre>";
die();

説明

mylayoutfile は、モジュール config.xml を介して更新でコンパイルされます

mynamespace_module のブロック クラス プレフィックスも、モジュールの config.xml 内で定義されます。

mynamespace_module/view をブロック型に設定してインスタンス化し、view.phtml の出力ファイルを設定

親ノード ブロックのメソッド setTest を呼び出すアクションが実行され、myparam1 と myparam2 の値を持つ 2 つのパラメーターが渡されます。

setTest 関数内では、クラス パラメータ「test」が「myparam1 myparam2」に等しく設定されます。

テンプレート ファイル app/design/.../.../mymodule/html/view.phtml が読み込まれ、$this->test の値がエコーされます ($this は以前にインスタンス化されたブロック クラス Mynamespace_mymodule_Block_View を参照します)。

質問

  1. これが使用されるユースケースの例は何ですか?
  2. 文字列以外のものを渡すことはできますか? (オブジェクト、配列)?
  3. 自動セッターとゲッター メソッドはレイアウト ファイル内から機能しますか?
  4. ロジックを使用できますか (if、then、foreach、else など)?
  5. この方法を使用してはいけないシナリオはありますか?
  6. レイアウト ファイル内からのブロックのインスタンス化に関連して、他に不足している可能性のあるものはありますか?
  7. レイアウト ファイル内からのアクションに関連して、他に不足している可能性があるものはありますか?
4

1 に答える 1

14
  1. 多目的テンプレートに使用できます。catalog.xmlでの使用を見setTitleてください。
  2. 何でも渡せます。配列は、レイアウト XML で定義できます。

    <action method="setFoo">
        <arbitrary>
            <key1>val1</key1>
            <key2>val1</key2>
        </arbitrary>
    </action>
    

    また、引数ノードはヘルパー メソッドを実行でき、その戻り値は値として渡されます。

    <action method="setFoo">
        <arbitrary helper="foo/bar" />
    </action>
    

    これにより、ヘルパーがインスタンス化され、メソッドが実行されます: Mage::helper('foo')->bar(). したがって、戻り値は任意のものにすることができます。さらに、引数を子ノードのヘルパーに渡すことができます!

  3. Blocks extends Varien_Object、そうです、セッターは使用する唯一の合理的なものですが。
  4. これには直接的な論理はありません。最も近いのは、指定された引数でifconfig呼び出さMage::getStoreConfigFlag()れ、config 値が true の場合にアクションを処理するアクションの属性です。
  5. 「[c]使用できません」 - いいえ。「どうでもいい」 - はい。
  6. ニュアンスはたくさんありますが (多すぎてここには入りません)、すでに多くのことがわかっています。Alan Storm は、彼の著書No Frills Magento Layoutですべてのニュアンスを理解しています。ただし、自分で限界を探ることに勝るものはありません。
于 2012-12-07T02:15:08.360 に答える