我正在尝试使用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
{
}
答案 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>