【问题标题】:In Magento ,is it possible to modify the default template files via custom modules without hacking into its *.phtml core files?在 Magento 中,是否可以通过自定义模块修改默认模板文件而不侵入其 *.phtml 核心文件?
【发布时间】:2011-02-07 05:49:50
【问题描述】:

我正在创建一个自定义模块,我在产品视图页面中添加了一个按钮(默认文件)。我已在以下文件中插入了按钮代码

app\design\frontend\base\default\template\catalog\product\view.phtml

并且按钮显示并运行良好。但是每次更新 Magento 时,上述文件都会被替换,因此我的代码被丢弃。有没有办法从我的自定义模块中修改或扩展或注入模板编码?应该我需要覆盖核心块或一些东西?

【问题讨论】:

    标签: php e-commerce magento


    【解决方案1】:
    • 给你的模块一个布局文件:

      ...
      <frontend>
          <layout>
              <updates>
                  <YOUR_MODULE>
                      <file>YOURMODULE.xml</file>
                  </YOUR_MODULE>
              </updates>
          </layout>
      </frontend>
      ...
      
    • 在基本主题的layout/YOURMODULE.xml 文件中:

      <layout version="1.0">
          <catalog_product_view>
              <reference name="product.info">
                  <action method="setTemplate"><name>YOURMODULE/product/view.phtml</name></action>
              </reference>
          </catalog_product_view>
      </layout>
      
    • 将修改后的view.phtml复制到新目录template/YOURMODULE/product/

    • 打包模块时,请记住包含所有这些文件,但不要覆盖template/catalog/product/view.phtml

    下载您的模块的任何人都可能希望对该模板进行自己的更改,因此您还应该说明哪些文件已更改以及在哪里可以找到它。由于view.phtml 经常被主题和其他模块更改,因此更改其中一个子模板会更好 - 哪个子模板取决于您的按钮所在的位置。

    作为奖励,在 core/text_list 类型的价格之后有一个名为 extrahint 的块 - 它没有模板,因此您在使用 template path hints 时通常可能会错过它。您可以安全地添加任意数量的模板,而无需更改任何现有模板:

    <layout version="1.0">
        <catalog_product_view>
            <reference name="product.info.extrahint">
                <block type="core/template" name="YOUR.CUSTOM.BLOCK" template="YOUR/CUSTOM/TEMPLATE.phtml" />
            </reference>
        </catalog_product_view>
    </layout>
    

    只有在价格对您有用时才会有所帮助。可以安全附加的其他块是选项和容器区域,但它们仅显示具有选项的产品。

    【讨论】:

    • 感谢您的回答。一个疑问,您提到的参考名称标签` `用于引用任何特定块,默认view.phtml的一部分或仅供参考?还有哪个布局xml文件处理产品view.phtml页面?
    • product.info 特指显示view.phtml 模板的catalog/product_view 块。搜索文件 catalog.xml 以查看它的使用位置和方式,以及同一页面上使用的其他块的名称。
    【解决方案2】:

    问题是您将它安装在 app/design/frontend/base/default.xml 中。

    您需要在另一个目录中创建此目录的副本,例如 app/design/frontend/default/yoursite。

    Read this for more info on how to do it specifically

    【讨论】:

    • 如果自定义模块要由其他用户安装,这并不是一个真正实用的解决方案......你不能要求他们仅仅为你的模块改变他们的设计
    • 实际上这是 magento 的做法,如果安装了自定义功能,模板可以修改或替换为您修改前的模板。我们无法通过布局文件访问每个 dom 元素,理论上我们可以预先解析模板并始终替换其中的内容,但这并不酷,只会让设计师的生活更加困难
    • @Anton S:是的,即使可以访问每个 dom 元素,也会导致更复杂。
    【解决方案3】:

    您不能将自定义扩展程序构建为依赖于默认视图,这表明计划不佳。您应该克隆此模板或对其进行扩展,并有办法启用和禁用您的功能。如果您的模块实现模板或有办法修改其他模板,则必须具备“设计师指南”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 2012-05-30
      • 1970-01-01
      相关资源
      最近更新 更多