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.