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)

Narendra.vyas
fonte
é 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>
Rakesh Jesadiya
fonte
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>
Prince Patel
fonte