Como substituir um arquivo de modelo na criação de módulos no Magento2


8

Eu quero substituir:

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

copiei e colei no meu módulo personalizado em:

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

Este é o meu arquivo de layout:

<?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>

em:

/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>
  • O módulo está funcionando para o hello world simples, para que seja registrado corretamente ...

O problema está no arquivo de dicas de caminho do modelo vem do fornecedor .. mas deve vir apenas do meu módulo personalizado (não do tema)


é a nomeação catalog_product_view.xml é essencial ou podemos dar qualquer nome ao arquivo. na verdade eu preciso de ajuda sobre substituindo template
— Siddhesh

siddhesh o nome desse arquivo é definitivamente essencial. Determina onde o arquivo de layout é carregado. Por exemplo, default.xmlé carregado em todas as páginas, mas catalog_product_view.xmlé carregado apenas na catalog/product/viewação.
— Jacques

Respostas:


17

você pode tentar com o código abaixo no arquivo 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>

Sim, definitivamente ..
— Narendra.vyas

como verificar se o arquivo xml de layout é usado ou não? Eu tentei escrever xml inválido e ainda assim minha página foi renderizada corretamente. então eu concluiu o meu arquivo de layout xml não é executado você me dizer como resolver isso
— Siddhesh

ou precisamos para executar algum tipo de comandos depois de atualizar arquivo xml
— Siddhesh

11
Na verdade, nos documentos de desenvolvimento do magento 2 você pode ler "usando a instrução <action>. Dessa forma, não é recomendado , mas pode ser usado para ...". Eu recomendaria usar o método sugerido nessa página em Definir um modelo de bloco . Portanto, usar a ação para alterar o modelo não é uma boa solução.
— drew7721

10

Existem três métodos disponíveis para substituir arquivos de modelo no Magento

Por exemplo: Aqui, substituímos o arquivo addtocart.phtml por produto simples.

Método 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>

Método 2:

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

Método 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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.