วิธีเขียนทับเทมเพลตผ่านโมดูลใน Magento2


9

app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtmlฉันสร้างโมดูลและต้องการจะเขียนทับแม่แบบ

เป็นไปได้ในโมดูล (ไม่ใช่ธีม)

น่าเสียดายที่ดูเหมือนไม่ง่ายที่จะเปลี่ยนชื่อโมดูลผ่านโครงร่าง XML เนื่องจากมีการกำหนดฮาร์ดโค้ดไว้ในhttps://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Block /Adminhtml/Product/Edit/Tab/Options.php#L21


โปรดอ้างอิงลิงค์นี้สำหรับคำตอบmagento.stackexchange.com/questions/76434/…
Divya Muralidharan

โปรดอ้างอิงลิงค์นี้สำหรับคำตอบmagento.stackexchange.com/questions/76434/…
Divya Muralidharan

คำตอบ:


10

เพิ่มโฟลเดอร์โครงร่างของไฟล์โมดูลของคุณ [ผู้ให้บริการ] / [ชื่อโมดูล] /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>

ต้องเพิ่มโมดูล xml ในบรรทัดนี้เพื่อโหลดโครงร่างหลังจากแคตตาล็อก

<sequence>
        <module name="Magento_Catalog"/>
</sequence>

คุณได้รับชื่อadmin.product.optionsจากที่ไหน
อเล็กซ์

เพียงค้นหา \ Magento \ Catalog \ Block \ Adminhtml \ Product \ Edit \ Tab \ ตัวเลือกตามไฟล์เลย์เอาต์และค้นหาการประกาศใน Magento / Catalog / view / adminhtml / layout /
catalog_product_options.xml

1
มันไม่ควรจะเป็นVendor_ModuleName::product_options.phtml?
Giel Berkers

ใช่ขอบคุณสำหรับจุด
KAndy

2
วิธีนี้ใช้ได้เฉพาะถ้าเทมเพลตดั้งเดิมถูกตั้งค่าในไฟล์ Block.php หากเทมเพลตดั้งเดิมตั้งอยู่บน layout.xml โซลูชันนี้จะไม่ทำงาน วิธีที่ดีคือมักจะใช้แทน<action method="setTemplate"> <arguments>วิธีนี้ใช้ได้ในทุกกรณี
Jalogut

3
  1. สร้างไฟล์เลย์เอาต์ที่เกี่ยวข้องในโมดูลของคุณ:

[ผู้ขาย] / [ModuleName] /view/adminhtml/layout/catalog_product_options.xml

  1. ตั้งค่าการกำหนดค่าแม่แบบที่กำหนดเองของคุณ
<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>

หมายเหตุ: มันเป็นสิ่งสำคัญมากที่จะใช้แทน<action method="setTemplate"> จะใช้งานได้หากบล็อกไม่มีเทมเพลตอื่นที่ระบุในการประกาศ xml ในกรณีอื่น ๆ คุณจะต้องแทนที่เทมเพลตที่มีอยู่ มันจะดีกว่าที่จะใช้เพราะมันใช้งานได้เสมอ<arguments><arguments><action method="setTemplate"><action method="setTemplate">


0

ใช่คุณสามารถเขียนทับไฟล์เทมเพลตได้จากแอพ / รหัสของโมดูลที่คุณกำหนดเอง อย่างไรก็ตามโปรดจำไว้ว่าในแนวคิดการสืบทอดมรดกของวีโอไอพีไฟล์ (เทมเพลตเลย์เอาท์ไฟล์คงที่) จากแอพ / การออกแบบจะเขียนทับเหมือนกันในแอพ / รหัส เช่นเดียวกับธีมลูกเขียนทับธีมแม่

ดังนั้นฉันคิดว่ามันจะดีที่สุดในการสร้างธีมที่กำหนดเองสำหรับโมดูลที่กำหนดเองของคุณและเพิ่มไฟล์ phtml, xml, css, js, ฟอนต์และรูปภาพทั้งหมดในแอพ / การออกแบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.