Как переопределить файл шаблона при создании модуля в 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>
  • Модуль работает для простого привет мира, поэтому он зарегистрирован правильно ...

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


является ли каталог_продуктом_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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.