修改Magento模板的正确方法/方法是什么?


15

请为我建议正确的方法,当用户单击按钮时,我想在弹出窗口中自定义“给朋友的电子邮件”页面(通过电子邮件发送此产品)。通过启用模板提示,我发现按钮呈现为

frontend / rwd / default / template / catalog / product / view / sharing.phtml

相应的布局文件是catalog.xml(在frontend / rwd / default / layout中)

因此,我local.xmlcatalog.xml存在以下代码的同一文件夹中创建了一个文件夹(只是我给了test.phtml而不是sharing.phtml,只是为了“调试”)

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

但是什么也没发生,我的意思是我可以在不修改现有主题xmlphtml文件的情况下更改(覆盖)主题的默认设计吗?

Answers:


10

这是您应该放入local.xml文件中的内容。

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

你做过的错误

  • 您使用了两个布局更新句柄defaultcatalog-product-view。那是错的。您只需要一个布局更新句柄。您应该在这里使用的正确的是catalog_product_view

  • 所以catalog-product-view是Magento的未知。正确的名字是catalog_product_view

  • 由于已经通过定义共享块catalog.xml,因此您现在需要引用该块,然后通过添加操作来更改模板setTemplate。那就是上面的脚本所做的。

希望你明白


我使用了您的local.xml,它仍然显示指定文件夹中的现有文件夹(我创建了一个test.phtml)
Dimag Kharab 2015年

您是否清除了缓存?如果您正确完成了所有操作,则应该可以正常工作。
拉吉夫K托米2015年

在我的情况下,禁用了yup缓存,并且我也重新编制了索引(我想不需要它了)
Dimag Kharab 2015年

将其<reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>直接添加到节点下<catalog_product_view>。并查看产品视图页面底部的test.phtml文件内容是否可用
Rajeev K Tomy 2015年

仍然没有运气兄弟
Dimag Kharab 2015年

10

我将尝试给出一个一般性的答案。

如何更改模板

在您的主题中,您可以覆盖phtml默认主题或父主题中的所有文件。将原始文件复制到app/design/frontend/[package]/[theme]/template/[path/to/phtml]并进行更改。

如果您还没有项目专用的自定义主题,例如,因为您刚刚购买了一个主题,请确保在创建一个主题。

app/design/frontend/[original-package]/[project-name]

它将继承自[original-package]/[default],您无需从默认值复制所有内容,只需复制需要更改的文件即可。

特定于模块的更改

覆盖phtml文件的替代方法是更改模板路径。通常可以这样在布局XML中完成此操作:

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

但这是供需要切换模板的模块使用的,不适用于主题特定的更改。新模板应该在base/default那时。

如何使用local.xml / theme.xml

local.xml文件必须位于您正在使用的实际主题的目录中,即

app/design/frontend/[package]/[theme]/layout

local.xml不考虑后备层次结构中的多个文件。可以使用其中的第一个:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(假设默认层次结构,没有自定义定义的层次结构)

如何进行变更

您只应在local.xml中进行修改,而不能重复原始XML文件中已经存在的定义。这也意味着,避免从默认主题复制XML文件以直接在文件中进行更改。保持主题layout目录清洁!

的典型元素local.xml<remove>完全删除现有的块,<action method="unsetChild">以及<action method="append">将一个块从一个父对象移动到另一个父对象,或者调用现有块上的任何其他方法来修改其行为。

Magento 1.9

从Magento 1.9开始,最佳实践实际上是不使用layout/local.xml这些更改,但是etc/theme.xml

简而言之,您可以在app / design / frontend / yourpackage / etc / theme.xml中添加布局更新。优点是您可以控制布局更新的加载顺序。在Magento 1.9始终总是最后加载local.xml之前,不可能在其后执行布局指令。

我不再将local.xml用于特定于项目的主题修改。我认为local.xml仅出于向后兼容的原因(在1.9及更高版本中)使用,因为不再使用它了。Magento 2(https://github.com/magento/magento2/issues/1037)中也消除了Local.xml 。

资料来源:https : //erfanimani.com/dont-use-local-xml/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.