Как переопределить файл шаблона при создании модуля в Magento2

8

Я хочу переопределить:

/opt/lampp/htdocs/magento_composer/vendor/magento/module-catalog/view/frontend/templates/product/view/addtocart.phtml

я скопировал и вставил его в свой пользовательский модуль по адресу:

/opt/lampp/htdocs/magento_composer/app/code/Hello/Custom/view/frontend/templates/product/view/addtocart.phtml

Это мой файл макета:

<?xml version="1.0"?>
<page layout="1column" 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.addtocart" template="Hello_Custom::product/view/addtocart.phtml" after="alert.urls">

        </referenceBlock>

    </body>
</page>

в:

/opt/lampp/htdocs/magento_composer/app/code/Hello/Custom/view/frontend/layout/catalog_product_view.xml

module.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Hello_Custom" setup_version="1.0.0" schema_version="1.0.0">
    </module>
</config>
  • Модуль работает для простого привет мира, поэтому он зарегистрирован правильно ...

Проблема заключается в том, что файл подсказок к шаблонам идет от производителя ... но он должен исходить только из моего пользовательского модуля (не из темы)

Narendra.vyas
источник
является ли каталог_продуктом_view.xml присвоение имен важно, или мы можем дать любое имя файла. на самом деле мне нужна помощь по переопределению шаблона
siddhesh
siddhesh наименование этого файла определенно необходимо. Он определяет, куда загружается файл макета. Например default.xml, загружается на каждой странице, но catalog_product_view.xmlзагружается только в catalog/product/viewдействии.
Жак

Ответы:

17

Вы можете попробовать с приведенным ниже кодом в файле XML,

<?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <referenceBlock name="product.info.addtocart">
                <action method="setTemplate">
                    <argument name="template" xsi:type="string">Hello_Custom::product/view/addtocart.phtml</argument>
                </action>
            </referenceBlock>
         </referenceContainer>
    </body>
</page>
Ракеш Джесадия
источник
Да, определенно ..
Narendra.vyas
Как проверить, используется ли макет XML-файла или нет? Я пытался написать недействительный XML, и все же моя страница была отображена правильно. поэтому я пришел к выводу, что мой файл макета XML не выполняется, вы говорите мне, как решить эту проблему
siddhesh
или нам нужно запускать какие-то команды после обновления XML-файла
siddhesh
1
На самом деле, в документации разработчика magento 2 вы можете прочитать "используя инструкцию <action>. Этот способ не рекомендуется , но может использоваться для ...". Я бы рекомендовал использовать метод, предложенный на этой странице в разделе « Установить шаблон блока» . Поэтому использование действия для изменения шаблона не является хорошим решением.
drew7721
10

Есть три способа переопределить файлы шаблонов в Magento

Например: здесь мы перезаписываем файл addtocart.phtml для простого продукта.

Способ 1:

<referenceContainer name="content">
    <referenceBlock name="product.info.addtocart">
        <action method="setTemplate">
            <argument name="template" xsi:type="string">Vendor_Module::product/view/addtocart.phtml</argument>
        </action>
    </referenceBlock>
</referenceContainer>

Способ 2:

<referenceContainer name="content">
    <referenceBlock name="product.info.addtocart" template="Vendor_Module::product/view/addtocart.phtml"/>
</referenceContainer>

Способ 3:

<referenceContainer name="product.info.form.content">
    <block class="Magento\Catalog\Block\Product\View" name="product.info.addtocart" as="addtocart" template="Vendor_Module::product/view/addtocart.phtml"/>
</referenceContainer>
Принц Патель
источник