Cómo anular un archivo de plantilla en la creación del módulo en Magento2

8

Quiero anular:

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

Lo he copiado y pegado en mi módulo personalizado en:

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

Este es mi archivo de diseño:

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

a:

/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>
  • El módulo funciona para hello world simple, por lo que está registrado correctamente ...

El problema está en el archivo de sugerencias de ruta de la plantilla que proviene del proveedor ... pero debería provenir solo de mi módulo personalizado (no del tema)

Narendra.vyas
fuente
El nombre de catalog_product_view.xml es esencial o podemos dar cualquier nombre al archivo. en realidad necesito ayuda para anular la plantilla
siddhesh
siddhesh el nombramiento de ese archivo es definitivamente esencial. Determina dónde se carga el archivo de diseño. Por ejemplo, default.xmlse carga en cada página pero catalog_product_view.xmlsolo se carga en la catalog/product/viewacción.
Jacques

Respuestas:

17

puedes probar con el siguiente código en el archivo 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
fuente
Sí, definitivamente ..
Narendra.vyas
¿Cómo verificar si el archivo xml de diseño se usa o no? Traté de escribir xml inválido y aún así mi página se procesó correctamente. por lo que la conclusión de mi archivo de diseño xml no se ejecuta me cuentas cómo solucionar esto
Siddhesh
o necesitamos ejecutar algún tipo de comandos después de actualizar el archivo xml
siddhesh
1
En realidad, en los documentos de desarrollo de magento 2 puedes leer "usando la instrucción <acción>. De esta manera no se recomienda , pero se puede usar para ...". Recomendaría usar el método sugerido en esa página en Establecer una plantilla de bloque . Por lo tanto, usar la acción para cambiar la plantilla no es una buena solución.
drew7721
10

Hay tres métodos disponibles para anular archivos de plantilla en Magento

Por ejemplo: aquí anulamos el archivo addtocart.phtml para un producto simple.

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>
Príncipe Patel
fuente