使用Magento 2中的自定义模块覆盖模板

时间:2017-01-13 20:53:29

标签: magento layout module magento2

我正在尝试覆盖自定义模块中/vendor/magento/module-grouped-product/view/frontend/layout/catalog_product_view_type_grouped.xml中定义的模板。该文件有一个名为product.info.grouped的块,其定义如下:

<block class="Magento\GroupedProduct\Block\Product\View\Type\Grouped" name="product.info.grouped" before="product.info.addtocart" template="product/view/type/grouped.phtml"/>

所以我创建了一个文件/app/code/FortyThree/GroupedConfigurableProduct/view/frontend/layout/catalog_product_view_type_grouped.xml并在其中

<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
  <referenceBlock name="product.info.grouped">
    <action method="setTemplate">
      <argument name="template" xsi:type="string">FortyThree_GroupedConfigurableProduct::product/view/type/grouped.phtml</argument>
    </action>
  </referenceBlock>
</layout>

并创建了相应的.phtml文件,但它并没有覆盖原始模板文件。还有什么我需要做的才能让覆盖注册吗?我已经尝试了setup:upgrade并且缓存了缓存似乎无效。我还在Magento_GroupedProduct的序列部分设置了module.xml,以确保其后加载。

看起来我的catalog_product_view_type_grouped.xml似乎没有被阅读,因为我在那里做的事似乎没什么关系。

1 个答案:

答案 0 :(得分:0)

您的布局文件并不好。

这应该可以解决问题:

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="product.info.grouped">
            <action method="setTemplate">
                <argument name="template" xsi:type="string">FortyThree_GroupedConfigurableProduct::product/view/type/grouped.phtml</argument>
            </action>
        </referenceBlock>
    </body>
</page>

另外,不要忘记在模块中为GroupedProduct添加依赖项。

有几种方法可以检查您是否正确引用了一个块。您可以简单地使用删除,以查看是否可以确认您有正确的阻止。