【问题标题】:Override "setTemplate" Magento xml覆盖“setTemplate” Magento xml
【发布时间】:2012-11-27 04:58:31
【问题描述】:

在我已经使用的主题中(在 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 中的第一个 我怎样才能覆盖它?

【问题讨论】:

    标签: xml templates magento layout


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你不应该(尽管我会在这篇文章的结尾给你一些可能的想法)。 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 运行。

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

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

      祝你好运。

      【讨论】:

      • 感谢艾伦的澄清!第一次更新是在默认句柄中运行的,之后是否有另一个句柄运行在每个页面视图上?
      • @Vindfrisk 除了default 之外,没有任何一个句柄可以在任何地方使用。但总是有customer_logged_incustomer_logged_out 之一,因此如果您将XML 复制到这两者,它将覆盖default
      • @clockworkgeek,不,我刚试过,default 不会被customer_logged_outcustomer_logged_in 覆盖。我在 Magento 1.9 中尝试过
      猜你喜欢
      • 1970-01-01
      • 2013-11-02
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 2012-05-13
      • 2015-08-04
      • 2013-10-15
      相关资源
      最近更新 更多