So überschreiben Sie eine Vorlage über ein Modul in Magento2

9

Ich erstelle ein Modul und möchte die Vorlage überschreiben app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml.

Ist dies in einem Modul möglich (kein Thema)

Leider scheint es nicht sehr einfach zu sein, den Modulnamen über Layout-XML zu ändern, da dies in https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Block fest codiert ist /Adminhtml/Product/Edit/Tab/Options.php#L21

Alex
quelle
Bitte beziehen Sie sich auf diesen Link für die Antwort magento.stackexchange.com/questions/76434/…
Divya Muralidharan
Bitte beziehen Sie sich auf diesen Link für die Antwort magento.stackexchange.com/questions/76434/…
Divya Muralidharan

Antworten:

10

Fügen Sie den Layoutordner Ihrer Moduldatei [Vendor] / [ModuleName] /view/adminhtml/layout/catalog_product_options.xml hinzu

<?xml version="1.0"?>
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="admin.product.options">
        <arguments>
            <argument name="template" xsd:type="string">[Vendor]/[ModuleName]::product_options.phtml</argument>
        </arguments>
    </referenceBlock>
</layout>

Außerdem muss diese Zeile zum Modul xml hinzugefügt werden, um die Layouts nach dem Katalog zu laden

<sequence>
        <module name="Magento_Catalog"/>
</sequence>
KAndy
quelle
Woher hast du den Namen admin.product.options?
Alex
Suchen Sie einfach nach \ Magento \ Catalog \ Block \ Adminhtml \ Product \ Edit \ Tab \ Options nach Layoutdateien und finden Sie die Erklärung in Magento / Catalog / view / adminhtml / layout / catalog_product_options.xml
KAndy
1
Sollte es nicht sein Vendor_ModuleName::product_options.phtml?
Giel Berkers
Ja, danke für Punkt
KAndy
2
Diese Lösung funktioniert nur, wenn die ursprüngliche Vorlage in der Datei Block.php festgelegt wurde. Wenn die ursprüngliche Vorlage in der Datei layout.xml festgelegt ist, funktioniert diese Lösung nicht. Ein besserer Ansatz ist es, immer <action method="setTemplate">statt zu verwenden <arguments>. Diese Lösung funktioniert in allen Fällen.
Jalogut
3
  1. Erstellen Sie eine entsprechende Layoutdatei in Ihrem Modul:

[Hersteller] / [Modulname] /view/adminhtml/layout/catalog_product_options.xml

  1. Legen Sie Ihre benutzerdefinierte Vorlagenkonfiguration fest
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
    <referenceBlock name="admin.product.options">
        <action method="setTemplate">
            <argument name="template" xsi:type="string">[Vendor]_[ModuleName]::product_options.phtml</argument>
        </action>
    </referenceBlock>
</layout>

HINWEIS: Es ist sehr wichtig, <action method="setTemplate">anstelle von zu verwenden <arguments>. <arguments>funktioniert nur, wenn für den Block keine andere Vorlage in der XML-Deklaration angegeben ist. In jedem anderen Fall müssen Sie <action method="setTemplate">die vorhandene Vorlage überschreiben. Es ist besser zu verwenden, <action method="setTemplate">weil es immer funktioniert.

Jalogut
quelle
0

Ja, Sie können Vorlagendateien aus der App / dem Code Ihres benutzerdefinierten Moduls überschreiben. Beachten Sie jedoch, dass im Vererbungskonzept von Magento Dateien (Vorlagen, Layouts, statische Dateien) aus App / Design dasselbe in App / Code überschreiben. So wie das untergeordnete Thema das übergeordnete Thema überschreibt.

Daher halte ich es für das Beste, ein benutzerdefiniertes Design für Ihr benutzerdefiniertes Modul zu erstellen und alle Ihre HTML-, XML-, CSS-, JS-, Schrift- und Bilddateien dort in App / Design hinzuzufügen.

Iveta Allogenes
quelle