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