So überschreiben Sie eine Vorlagendatei bei der Modulerstellung in Magento2

8

Ich möchte überschreiben:

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

Ich habe es kopiert und in mein benutzerdefiniertes Modul eingefügt unter:

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

Dies ist meine Layoutdatei:

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

beim:

/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>
  • Das Modul funktioniert für die einfache Hallo-Welt, daher ist es korrekt registriert ...

Das Problem ist, dass die Datei mit den Hinweisen zum Vorlagenpfad vom Hersteller stammt. Sie sollte jedoch nur von meinem benutzerdefinierten Modul stammen (nicht vom Thema).

Narendra.vyas
quelle
Die Benennung von catalog_product_view.xml ist unerlässlich, oder wir können der Datei einen beliebigen Namen geben. Eigentlich brauche ich Hilfe beim Überschreiben der Vorlage
Siddhesh
siddhesh die Benennung dieser Datei ist definitiv wichtig. Es bestimmt, wo die Layoutdatei geladen wird. Zum Beispiel default.xmlwird auf jeder Seite catalog_product_view.xmlgeladen, aber nur auf die catalog/product/viewAktion geladen .
Jacques

Antworten:

17

Sie können mit dem folgenden Code in der XML-Datei versuchen,

<?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
quelle
Ja auf jeden Fall ..
Narendra.vyas
Wie überprüfe ich, ob eine Layout-XML-Datei verwendet wird oder nicht? Ich habe versucht, ungültige XML zu schreiben und trotzdem wurde meine Seite korrekt gerendert.
Also kam
oder müssen wir nach dem Aktualisieren der XML-Datei eine Art
Befehl ausführen
1
Tatsächlich können Sie in den Entwicklungsdokumenten von Magento 2 lesen "mit der Anweisung <Aktion>. Diese Methode wird nicht empfohlen , kann aber für ... verwendet werden." Ich würde empfehlen, die auf dieser Seite unter Blockvorlage festlegen vorgeschlagene Methode zu verwenden . Die Verwendung der Aktion zum Ändern der Vorlage ist daher keine gute Lösung.
zog7721
10

Es gibt drei Methoden, um Vorlagendateien in Magento zu überschreiben

Zum Beispiel: Hier überschreiben wir die Datei addtocart.phtml für ein einfaches Produkt.

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

Methode 2:

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

Methode 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>
Prinz Patel
quelle