在我的主题中,我已经使用(在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中选择第一个 我怎样才能覆盖这个?
答案 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文件中删除声明。