在Magento中,是否可以通过自定义模块修改默认模板文件而不侵入其*.phtml核心文件?

Pra*_*Max 1 php magento e-commerce

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

app\design\frontend\base\default\template\catalog\product\view.phtml
Run Code Online (Sandbox Code Playgroud)

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

clo*_*eek 8

  • 为模块提供布局文件:

    ...
    <frontend>
        <layout>
            <updates>
                <YOUR_MODULE>
                    <file>YOURMODULE.xml</file>
                </YOUR_MODULE>
            </updates>
        </layout>
    </frontend>
    ...
    
    Run Code Online (Sandbox Code Playgroud)
  • 在基本主题的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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 将修改后的内容复制view.phtml到新目录template/YOURMODULE/product/

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

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

只有在价格对您有用之后才有用.可以安全附加的其他块是选项和容器区域,但它们仅针对具有选项的产品显示.