0

私はこれでウィジェットを含むボックスに setData を使用して変数を渡そうとしています:

$this->getChild('my_box')->setData('myvar', '123');
echo $this->getChildHtml('my_box');

またはこれ:

echo $this->getChild('my_box')->setData('myvar', '123')->toHtml();

「my_box」はウィジェットにリンクされたブロックで、フッターに配置され、local.xml で定義されます。

<reference name="footer">
    <block type="core/text_list" name="my_box" as="my_box" translate="label">
        <label>My Box</label>
    </block>
</reference>

しかし、これらの方法のいずれかを使用してウィジェットの値を取得しようとすると:

echo $this->getData('myvar');
echo $this->getMyVar();
echo $this->myvar;

戻り値はありません。何か提案はありますか?

4

1 に答える 1

1

書き換え以外では、(リンク)"core/text_list"のインスタンスであり、コードを呼び出すためのテンプレートはありません。Mage_Core_Block_Text_List

ただし、基本的な機能が機能していることを確認できます。

$my_box = $this->getChild('my_box')->setData('myvar','123'); //if no error, my_box exists!

echo get_class($my_box); //Mage_Core_Block_Text_List

var_dump($my_box->debug()); //array() including 'myvar' => '123'

echo $my_box->getData('myvar')` //correct
echo $my_box->myvar //works, but unconventional
echo $my_box->getMyVar() //will not access the property you set; rather...
echo $my_box->getMyvar() //will work

別の楽しみとして、レイアウト XML を介してプロパティを設定できます。

<reference name="footer">
    <block type="core/text_list" name="my_box" as="my_box" translate="label">
        <label>My Box</label>
        <action method="setMyvar">
            <arbitrary>123</arbitrary>
        </action>
        <!-- or <action method="setDatar">
            <name>myvar</name>
            <val>123</arbitrary>
        </action> -->
    </block>
</reference>

また、フッター ブロックはデフォルトでblock_htmlキャッシュに永続的にキャッシュされることに注意してください。

于 2013-03-23T00:43:30.637 に答える