0

我正在尝试在 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
{

}
4

1 回答 1

2

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

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

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

一:

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

二:

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

三:

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

这也可以直接在 PHP 中完成,通常在控制器之后loadLayout()或类似的调用中。

另外,请注意父块($this在您的情况下)通过别名“了解”他们的孩子。如果没有指定别名,则使用布局中的块名称作为别名。您可以将布局 XML 中的别名识别为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>

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

Zend_Debug::dump(array_keys($this->getChild()));
于 2013-09-12T17:21:05.297 回答