Cara menimpa templat melalui modul di Magento2

9

Saya membuat modul dan ingin menimpa template app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml.

Apakah ini mungkin dalam modul (bukan tema)

Sayangnya sepertinya tidak super-mudah untuk mengubah nama modul melalui tata letak XML, karena ini diatur dalam kode-keras di https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Block /Adminhtml/Product/Edit/Tab/Options.php#L21

Alex
sumber
Silakan merujuk tautan ini untuk jawabannya magento.stackexchange.com/questions/76434/...
Divya Muralidharan
Silakan merujuk tautan ini untuk jawaban magento.stackexchange.com/questions/76434/…
Divya Muralidharan

Jawaban:

10

Tambahkan folder tata letak file modul Anda [Vendor] / [ModuleName] /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>

Juga perlu menambahkan ke modul xml baris ini, untuk memuat tata letak Anda setelah katalog

<sequence>
        <module name="Magento_Catalog"/>
</sequence>
KAndy
sumber
Dari mana Anda mendapatkan nama itu admin.product.options?
Alex
Cukup cari \ Magento \ Katalog \ Blok \ Adminhtml \ Produk \ Edit \ Tab \ Opsi dengan file tata letak dan temukan deklarasi di Magento / Katalog / tampilan / adminhtml / tata letak / catalog_product_options.xml
KAndy
1
Bukankah seharusnya begitu Vendor_ModuleName::product_options.phtml?
Giel Berkers
Ya, terima kasih untuk poin
KAndy
2
Solusi ini hanya berfungsi, jika templat asli ditetapkan dalam file Block.php. Jika templat asli diatur pada layout.xml, solusi ini tidak akan berfungsi. Pendekatan yang lebih baik adalah dengan selalu menggunakan <action method="setTemplate">bukan <arguments>. Solusi ini berfungsi dalam semua kasus.
Jalogut
3
  1. Buat file tata letak yang sesuai dalam modul Anda:

[Vendor] / [ModuleName] /view/adminhtml/layout/catalog_product_options.xml

  1. Tetapkan konfigurasi template khusus Anda
<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>

CATATAN: sangat penting untuk menggunakan <action method="setTemplate">bukan <arguments>. <arguments>hanya akan berfungsi jika blok tidak memiliki templat lain yang ditentukan pada deklarasi xml. Dalam kasus lain, Anda perlu <action method="setTemplate">mengganti template yang ada. Lebih baik digunakan <action method="setTemplate">karena selalu berfungsi.

Jalogut
sumber
0

Ya, Anda dapat menimpa file template dari aplikasi / kode modul khusus Anda. Namun, perlu diingat bahwa dalam konsep pewarisan Magento, file (templat, layout, file statis) dari aplikasi / desain menimpa yang sama di app / kode. Sama seperti tema anak menimpa tema orang tua.

Jadi, saya menganggap yang terbaik untuk membuat tema khusus untuk modul khusus Anda dan menambahkan semua file phtml, xml, css, js, font dan gambar Anda di aplikasi / desain.

Iveta Allogenes
sumber