質問

ディーラーストアのコレクションがあります。顧客の場所からすべての店舗の距離を計算する関数を実装し、それぞれの距離の配列を持っています。 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).

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top