ブロックファイルからテンプレートファイルに配列を渡します
-
16-10-2019 - |
質問
ディーラーストアのコレクションがあります。顧客の場所からすべての店舗の距離を計算する関数を実装し、それぞれの距離の配列を持っています。 block.phpファイルにロジックを追加しました。
これで、この配列にテンプレートファイルからアクセスする必要があります。これを実装するにはどうすればよいですか?
私がWebから得るすべての回答は、必要なものとは正反対です - テンプレートファイルからファイルをブロックするためにデータを渡す
どんな助けも感謝します。
解決
テンプレートはブロッククラスのコンテキスト内のレンダラーです。これは、あなたが入れた情報を意味します $block->setMyPersonalVar($value)
で読むことができます $this->getMyPersonalValue()
テンプレート内。したがって、$ブロックのブロッククラスへの参照がある限り、任意の値を設定できます。
これは、ブロッククラス自体で使用できます。 toHtml
またはコントローラークラスで $this->getLayout()->getBlock('nameInLayout')->setMyPersonalValue()
またはどこにでも、たとえでオブザーバーで Mage::app()->getLayout()->getBlock('nameInLayout')->setMyPersonalValue()
代替案は使用することです Mage::register('name', $value)
と Mage::registry('name')
これがうまくいかない場合、私の最初の推測は次のとおりです。コードは間違った順序で実行されます
他のヒント
さて、例を考えてみましょう:
ブロックファイル あなたを返す関数で構成されています "配列", 、 お気に入り
public function someFunction(){
//your logic
return $your_array;
}
config.xmlで
<config>
...
<frontend>
...
<layout>
<updates>
<yournamespace_yourmodule module="Yournamspace_YourModule">
<file>something.xml</file>
</yournamespace_yourmodule>
</updates>
</layout>
App/design/frontend/default/your_theme/layout/someming.xml
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<block_in_which_you_want_your_template>
<reference name="parent_block_name">
<block type="yourmodule/block_path" name="unique_name" template="path/to/your/template.phtml" /> <!-- important part of this answer -->
</reference>
...
Template.phtmlになりました
電話 $this->someFunction()
配列を取得します。
キーは、Templateファイルをsomething.xmlでブロックを宣言することです。これにより、ブロックのすべてのメンバーにオブジェクトを使用してテンプレートにアクセスできます($this
).