如何在Magento 2中覆盖.phtml文件


15

我想自定义产品详细信息页面,因此需要覆盖以下位置的一些.phtml文件。

所以,我想知道,如何重写一个.phtml的文件vendor\magento\module-catalog\view\frontend\templates\productvendor\magento\module-theme\view

Answers:


23

有时我们需要对现有模板进行修改。与其直接对现有模板文件进行更改,不如在我们自己的主题中覆盖它们。让我们假设我们要更新类别列表页面(list.phtml)。为此,创建以下目录结构:

app/design/frontend/Mycompany/Basic/Magento_Catalog/templates/product

在这里,我假设我们当前的主题是基本。现在,从以下位置将list.phtml文件复制到产品目录中:

app/vendor/magento/module-catalog/view/frontend/templates/product/list.phtml

现在,您可以对覆盖文件进行任何修改。

有关详细信息,请阅读本教程,它对您有很大帮助。


2
嗨,我只是覆盖了以下路径中的list.phtml文件:\ app \ design \ frontend \ Magento \ luma \ Magento_Catalog \ templates \ product \ list.phtml。但这没有用。我能知道我做错了什么吗?
Vigna S

同样的问题,无论我点击刷新多少次,默认的加载都会超过自定义的加载。是的,在有人问之前,我有正确的路径,但是我正在使用composer安装magento,因此如果重要的话,默认设置将位于不同的位置。
达斯汀·普瓦森

我必须清除html块缓存,然后这对我来说非常有效!(我清除了此blog.gardenhouse.io/2018/05/29/…这样的缓存
paul,

但是,如何从模块中覆盖模板?
黑色

8

我在回答我自己的问题,

我发现了如何在问题中提到的位置覆盖.phtml文件,

您必须将它们放在以下位置以覆盖原始文件

app\design\frontend\<VENDOR_NAME>\<THEME_NAME>\Magento_Catalog\templates\product\view

而且我相信在Magento 2中覆盖任何其他.phtml文件的理论是相同的


能否请您简要介绍一下...就像我必须将自定义phtml文件复制到主题文件夹isit中一样?就像进入app \ design \ frontend \ <VENDOR_NAME> \ luma \ Magento_Catalog \一样,我是否必须创建我的Vendor文件夹并将核心phtml文件复制到其中?如果这样做,则视图文件夹中不需要模板?
Sushivam '16

嗨,我正在尝试为小部件覆盖phtml文件,但不确定使用的路径是否正确。Magento_Catalog路径的一部分特定于您要覆盖的模块文件夹吗?因此,如果我要覆盖vendor \ magento \ module-catalog-widget \ view \ frontend \ templates \ product \ widget \ content,我会用我的实例中的Magento_Catalog_Widget替换您实例中的Magento_Catalog吗?有点困惑,因为我还不清楚。
罗布特(Rogt)'17

6

覆盖phtml,布局和Web文件以拥有自定义主题

1)覆盖模板文件:

供应商/ magento /模块目录/视图/前端/模板/产品/list.phtml

走这条路

app / design / frontend / vendor / theme / Magento_Catalog / templates / product / list.phtml

2)覆盖布局文件:

供应商/ magento /模块目录/视图/前端/布局/catalog_product_view.xml

走这条路

app / design / frontend / vendor / theme / Magento_Catalog / layout / catalog_product_view.xml


如何覆盖/自定义其他模块文件,例如观察者,控制器等?
塔希尔·亚辛

6

覆盖pthml和布局文件

vendor/magento/module-catalog/view/frontend/templates/product/list.phtml

进入

app/Mycompany/OverideCatalog/view/frontend/templates/product/list.phtml

布局:

vendor/magento/module-catalog/view/frontend/layout/catalog_category_view.xml

进入

app/Mycompany/OverideCatalog/view/frontend/layout/catalog_category_view.xml

<block class="Magento\Catalog\Block\Product\ListProduct" name="category.products.list" as="product_list" template="Mycompnay_OverideCatalog::product/list.phtml">

3

通过自定义主题覆盖模板(phtml)

如果vendor\magento\module-catalog\view\frontend\templates\product\some.phtml要先覆盖,则需要创建自定义主题,请参考链接以了解如何创建自定义主题。

之后,在您的自定义主题中创建phtml文件以覆盖默认文件

 app/design/frontend/vendor-name/theme-name/Magento_Catalog/templates/product/some.phtml

多数民众赞成在最后清除magento和浏览器的缓存,然后检查您的页面,仅反映新的phtml文件。

对所有模板覆盖都可以使用的相同方法。

祝好运


谢谢,我只是想出了问题,并在我自己的问题中回答了该发现,您的答案与我的发现非常相似。
nuwaus

2

打开文件夹:/vendor/magento/theme-frontend-luma/,然后从视图文件夹中复制模块模板和布局文件。

然后创建文件夹: /app/design/frontend/spacename/Theme/

然后创建模块文件夹,然后创建模板和布局文件夹。

从模块视图文件夹中插入模板和布局文件。


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.