在Magento中实例化块后发生致命错误

时间:2013-09-12 15:34:19

标签: ajax magento block

我正在尝试使用Magento中的ajax加载块。为实现此目的,控制器需要创建一个块并将数据数组传递给块的模板。这部分很简单,我有它的工作。

但是,被调用的模板也试图调用块setData

$this->getChild('customerfriends.event.edit')->setData(
    'event', $event);
echo $this->getChild('customerfriends.event.edit')->toHtml(); 

$this似乎不是导致致命错误的对象。

我需要在课堂上放一些东西吗?

class Namespace_Mymodule_Block_Event_Listsection extends Mage_Core_Block_Template
{

}

1 个答案:

答案 0 :(得分:2)

  

$this 似乎不是造成致命错误的对象。

如果正在调用模板,则$this 作为类实例; ref Mage_Core_Block_Template::fetchView(),并从那里追溯。问题是您的代码假定$this的子块具有customerfriends.event.edit别名,并立即执行对象操作($returnedObject->setData())。 / p>

您的问题的解决方案取决于确定如何customerfriends.event.edit别名作为子项分配给任何块实例{{1是的。在Magento中,这可以通过布局XML以三种方式之一发生:

一:

$this

二:

<reference name="theParentBlock">
    <block name="customerfriends.event.edit" ... />
</reference>

三:

<reference name="theParentBlock">
    <action method="insert"><block>customerfriends.event.edit</block></action>
</reference>

这也可以直接在PHP中完成,通常在调用<block name="customerfriends.event.edit" ... parent="theParentBlock" /> 或类似函数后在控制器中完成。

另外,请注意父级阻止(在您的情况下为loadLayout())&#34;知道&#34;他们的孩子是别名。如果未指定别名,则布局中的块名称将用作别名。您可以将布局XML中的别名识别为$this属性或as操作的第四个参数:

insert

<reference name="theParentBlock">
    <block name="customerfriends.event.edit" ... as="theAlias" />
</reference>

您可以通过执行以下操作查看父母的子女列表:

<reference name="theParentBlock">
    <action method="insert">
        <block>customerfriends.event.edit</block>
        <sibling />
        <after />
        <alias>theAlias</alias>
    </action>
</reference>