覆盖“setTemplate”Magento xml

时间:2012-12-09 17:28:00

标签: xml templates magento layout

在我的主题中,我已经使用(在local.xml中):

<reference name="top.links">
    <action method="setTemplate"><template>page/html/header/links.phtml</template></action>
</reference>

现在我正在创建一个模块,我想要更改模板,从而使模块可以安装而无需修改主题。 所以几乎相同的代码来自模块xml-file:

<reference name="top.links">
    <action method="setTemplate"><template>sociallogin/header/links.phtml</template></action>
</reference>

Magento总是在local.xml中选择第一个 我怎样才能覆盖这个?

2 个答案:

答案 0 :(得分:5)

你不应该(虽然我会在本文末尾给你一些可能的想法)。 Magento的设计使得local.xml中的代码“胜过”可安装模块文件中的代码。基本思路是local.xml是商店所有者去添加覆盖模块文件更新的布局更新。这就是The System Works™如何改变它会产生比它解决的更多的混乱。

也就是说,如果将代码放在不同的布局句柄中,您可以在系统中工作。句柄是围绕布局更新的节点

<default>
    ...   
</default>

<catalog_category_view>
</catalog_category_view>

<customer_logged_out>
</customer_logged_out>

etc...

Magento布局系统的工作方式是:

  • default标记中的所有更新都是从模块文件运行,然后是从local.xml运行。
  • 然后catalog_category_view的所有更新都从模块文件运行,然后从local.xml运行。
  • 然后customer_logged_out的所有更新都从模块文件运行,然后从local.xml运行。

也就是说,有一个句柄顺序/特异性。检查the Commerce Bug Demo store的布局选项卡(单击调试后)以查看页面的句柄顺序。 (免责声明:Commerce Bug是我创建和销售的产品)

因此,如果您的local.xml文件在default中应用了更新,并且您实际上无法重新调整此更新,那么您可以在稍后提供的句柄中应用模块更新。

祝你好运。

答案 1 :(得分:2)

您的local.xml布局文件将优先于所有其他xml文件(/app/etc/local.xml文件除外,但不应将其用于布局)。

您应该从local.xml文件中删除声明。