将变量传递给Magento小部件

时间:2013-03-22 15:26:37

标签: magento variables widget block

我正在尝试使用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;

没有返回值,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

在重写之外,"core/text_list"Mage_Core_Block_Text_List (link)的一个实例,并且没有模板供您调用代码。

您可以验证基本功能是否正常:

$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 缓存中。