更新布局XML更新中的块类型

时间:2011-04-28 21:07:09

标签: magento

我正在尝试更新主题布局XML中现有Block的“type”参数。 在示例中,我想使用块“catalog / rewrite_navigation”而不是“catalog / navigation”作为引用名称“catalog.topnav”。

我通过读取核心PHP文件进行布局,块,更新等测试了几种方法,但没有成功。我只是想避免使用unsetChild,然后重新创建一个块。

“常规”方式是:

    <reference name="top.menu">
        <action method="unsetChild"><name>catalog.topnav</name></action>
        <block type="catalog/rewrite_navigation" name="catalog.topnav" template="catalog/navigation/top.phtml"/>
    </reference>

但你们有没有做过这样的事情的线索:

    <reference name="catalog.topnav">
        <action method="setType"><name>catalog/rewrite_navigation</name></action>
    </reference>

通过这样的更新,catalog.topnav的块类型将从“catalog / navigation”更新为“catalog / rewrite_navigation”。

非常感谢你的想法!

1 个答案:

答案 0 :(得分:7)

我从未见过像这样的语法,我知道Magento在对它运行动作之前创建了对象(因为它需要有一个实例才能在该实例上执行方法)。这让我相信没有办法使用行动来做到这一点。

还要注意尝试通过取消设置块并再次添加它来执行此操作。在布局执行时,其他块可能已经将子块添加到该块中,并且当您移除块时它们将会脱落。

执行此操作的规范方法是简单地覆盖实际的catalog/navigation块,以便它返回您想要的类。如果由于某种原因,这对您不起作用(例如,其他人已经覆盖了该块),您可能需要修改XML文件以反映您的新类句柄。

希望有所帮助!