2

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

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

现在我正在制作一个要更改模板的模块,因此无需修改主题即可安装该模块。因此,来自模块 xml 文件的代码几乎相同:

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

Magento 总是选择 local.xml 中的第一个我如何覆盖它?

4

2 回答 2

5

你不应该(尽管我会在这篇文章的结尾给你一些可能的想法)。Magento 的设计使得代码local.xml“胜过”可安装模块文件中的代码。基本思想是local.xml店主去添加覆盖模块文件更新的布局更新。这就是系统的工作原理™,改变它会造成比它解决的更多的混乱。

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

<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.

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

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

祝你好运。

于 2012-12-09T19:21:54.260 回答
2

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

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

于 2012-12-09T19:17:29.260 回答