Come sovrascrivere un file modello nella creazione del modulo in Magento2


8

Voglio sovrascrivere:

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

l'ho copiato e incollato nel mio modulo personalizzato su:

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

Questo è il mio file di 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>

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>
  • Il modulo funziona per il semplice ciao mondo quindi è registrato correttamente ...

Il problema è nel file dei suggerimenti sul percorso del modello proviene dal fornitore .. ma dovrebbe provenire solo dal mio modulo personalizzato (non dal tema)


è catalog_product_view.xml la denominazione è essenziale o possiamo dare qualsiasi nome al file. in realtà ho bisogno di aiuto sulla
— sostituzione del

siddhesh la denominazione di quel file è sicuramente essenziale. Determina dove viene caricato il file di layout. Ad esempio, default.xmlviene caricato su ogni pagina ma catalog_product_view.xmlviene caricato solo catalog/product/viewsull'azione.
— Jacques,

Risposte:


17

puoi provare con il codice seguente nel file 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>

Sì, sicuramente ..
— Narendra.vyas,

come verificare se viene utilizzato o meno il file xml di layout? ho provato a scrivere XML non valido e ancora la mia pagina è stata visualizzata correttamente. quindi ho concluso che il mio file di layout XML non è stato eseguito mi dite come risolverlo
— siddhesh

o dobbiamo eseguire qualche tipo di comando dopo aver aggiornato il file xml
— siddhesh il

1
In realtà, nei documenti dev di magento 2 puoi leggere "usando l'istruzione <action>. In questo modo non è raccomandato , ma può essere usato per ...". Consiglierei di utilizzare il metodo suggerito in quella pagina in Imposta un modello di blocco . Quindi usare l'azione per cambiare il modello non è una buona soluzione.
— Drew7721,

10

Esistono tre metodi disponibili per sovrascrivere i file modello in Magento

Ad esempio: qui sovrascriviamo il file addtocart.phtml per un prodotto semplice.

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

Metodo 2:

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

Metodo 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.