我正在尝试更新主题布局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”。
非常感谢你的想法!
答案 0 :(得分:7)
我从未见过像这样的语法,我知道Magento在对它运行动作之前创建了对象(因为它需要有一个实例才能在该实例上执行方法)。这让我相信没有办法使用行动来做到这一点。
还要注意尝试通过取消设置块并再次添加它来执行此操作。在布局执行时,其他块可能已经将子块添加到该块中,并且当您移除块时它们将会脱落。
执行此操作的规范方法是简单地覆盖实际的catalog/navigation
块,以便它返回您想要的类。如果由于某种原因,这对您不起作用(例如,其他人已经覆盖了该块),您可能需要修改XML文件以反映您的新类句柄。
希望有所帮助!