Jak nadpisać szablon za pomocą modułu w Magento2

9

Tworzę moduł i chcę zastąpić szablon app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml.

Czy jest to możliwe w module (nie w temacie)

Niestety zmiana nazwy modułu za pomocą układu XML nie wydaje się zbyt łatwa, ponieważ jest to ustawione na stałe w https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Block /Adminhtml/Product/Edit/Tab/Options.php#L21

Alex
źródło
Link ten zawiera odpowiedź magento.stackexchange.com/questions/76434/...
Divya Muralidharan,
Link ten zawiera odpowiedź magento.stackexchange.com/questions/76434/…
Divya Muralidharan,

Odpowiedzi:

10

Dodaj folder układu pliku modułu [Dostawca] / [Nazwa modułu] /view/adminhtml/layout/catalog_product_options.xml

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

Należy również dodać do modułu xml ten wiersz, aby załadować układy po katalogu

<sequence>
        <module name="Magento_Catalog"/>
</sequence>
KAndy
źródło
Skąd masz nazwę admin.product.options?
Alex
Wystarczy wyszukać \ Magento \ Katalog \ Blok \ Adminhtml \ Produkt \ Edytuj \ Tab \ Opcje według plików układu i znaleźć deklarację w Magento / Katalog / view / adminhtml / layout / catalog_product_options.xml
KAndy
1
Nie powinno tak być Vendor_ModuleName::product_options.phtml?
Giel Berkers
Tak, dziękuję za punkt
KAndy
2
To rozwiązanie działa tylko wtedy, gdy oryginalny szablon został ustawiony w pliku Block.php. Jeśli oryginalny szablon jest ustawiony w layout.xml, to rozwiązanie nie będzie działać. Lepszym rozwiązaniem jest zawsze używać <action method="setTemplate">zamiast <arguments>. To rozwiązanie działa we wszystkich przypadkach.
Jalogut,
3
  1. Utwórz odpowiedni plik układu w swoim module:

[Producent] / [nazwa modułu] /view/adminhtml/layout/catalog_product_options.xml

  1. Ustaw niestandardową konfigurację szablonu
<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>

UWAGA: bardzo ważne jest, aby używać <action method="setTemplate">zamiast <arguments>. <arguments>będzie działać tylko wtedy, gdy w bloku nie ma innego szablonu określonego w deklaracji xml. W każdym innym przypadku musisz <action method="setTemplate">zastąpić istniejący szablon. Lepiej jest używać, <action method="setTemplate">ponieważ zawsze działa.

Jalogut
źródło
0

Tak, możesz zastąpić pliki szablonów z aplikacji / kodu niestandardowego modułu. Pamiętaj jednak, że w koncepcji dziedziczenia Magento pliki (szablony, układy, pliki statyczne) z aplikacji / projektu zastępują to samo w aplikacji / kodzie. Tak jak motyw podrzędny nadpisuje motyw nadrzędny.

Dlatego uważam, że najlepiej jest utworzyć niestandardowy motyw dla niestandardowego modułu i dodać tam wszystkie pliki phtml, xml, css, js, czcionkę i obrazy w aplikacji / projekcie.

Iveta Allogenes
źródło