2011-04-28 61 views
9

我试图更新我的主题布局XML中现有块的“类型”参数。 在例子中,我想使用Block“catalog/rewrite_navigation”而不是“catalog/navigation”作为参考名称“catalog.topnav”。更新块类型布局XML更新

我已经通过阅读核心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> 

有了这样的更新的目录块类型.topnav将从“目录/导航”更新为“目录/重写无效”。

非常感谢您的想法!

回答

7

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

还要小心试图通过取消设置块并重新添加它来完成此操作。在布局执行时,其他块可能已经将子项添加到该块中,并且在删除块时它们将简单地脱落。

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

希望帮助!

+0

是的 - 这就是我最后的结果:重写原始块类。这总是值得问。谢谢约瑟夫。 – 2011-04-28 23:05:31