จะเขียนทับไฟล์เทมเพลตหลักจากโมดูลที่กำหนดเองได้อย่างไร?


10

ฉันต้องการเขียนทับไฟล์สองไฟล์ คือview.phtmlและprint.phtmlคำสั่งขาย
(เส้นทาง: app/design/frontend/base/default/template/sales/order/)

ฉันกำลังสร้างโมดูลที่ฉันต้องการสร้างพา ธapp/design/frontend/base/default/template/<My Module Name>/sales/order/เพื่อที่ว่าคอร์view.phtmlและprint.phtmlไฟล์จะไม่ถูกเขียนทับ

ดังนั้นโปรดแนะนำฉันเกี่ยวกับวิธีการทำงานให้สำเร็จ

คำตอบ:


13

คุณสามารถทำได้ด้วยไฟล์ XML เลย์เอาต์ภายในโมดูลของคุณ คุณต้องมีส่วนในโมดูลของคุณconfig.xmlเช่นนี้เพื่อให้ Magento โหลดเค้าโครง XML ของโมดูลของคุณ (เส้นทาง:) app/design/frontend/base/default/layout/mymodulename.xml:

<config>
    [...]
    <frontend>
        [...]
        <layout>
            <updates>
                <mymodulename_layout module="MyModuleName">
                    <file>mymodulename.xml</file>
                </mymodulename_layout>
            </updates>
        </layout>
    </frontend>

ในไฟล์ XML โครงร่างนี้คุณสามารถอ้างอิงบล็อกเฉพาะและเปลี่ยนแม่แบบ

<layout>
    <sales_order_view>
        <reference name="sales.order.view">
            <action method="setTemplate">
                <template>mymodulename/sales/order/view.phtml</template>
            </action>
        </reference>
    </sales_order_view>
    <sales_order_print>
        <reference name="sales.order.print">
            <action method="setTemplate">
                <template>mymodulename/sales/order/print.phtml</template>
            </action>
        </reference>
    </sales_order_print>
</layout>

@ 7ochem วิธีการประสบความสำเร็จเหมือนกันใน magento2?
prasad maganti

คุณควรถามคำถามนี้เป็นคำถามใหม่เนื่องจากกว้างเกินไปที่จะใส่ไว้ในความคิดเห็นที่นี่และไม่ใช่สิ่งที่ OP ขอถาม
7ochem

3

สมมติว่าชื่อโมดูลของเรา 'CustomSales' และชื่อแพคเกจ "การออกกำลังกาย"

ขั้นตอนที่ 1: สร้างไฟล์กำหนดค่าโมดูลลงในแอพ / etc / modules / Exercise_CustomSales.xml

<config>
<modules>
    <Exercise_CustomSales>
        <active>true</active>
        <codePool>local</codePool>
    </Exercise_CustomSales>
</modules>

ขั้นตอนที่ 2: สร้างไฟล์กำหนดค่าภายใต้แอป / รหัส / ท้องถิ่น / แบบฝึกหัด / CustomSales / etc / config.xml

<config>
<modules>
    <Exercise_CustomSales>
        <version>1.7.0.2</version>
    </Exercise_CustomSales>
</modules>
<global>
    <blocks>
        <customsales>
            <class>Exercise_CustomSales_Block</class>
        </customsales>
        <sales>
            <rewrite>
                <order_view>Exercise_CustomSales_Block_Sales_Order_View</order_view>
            </rewrite>
        </sales>
    </blocks>
</global>

ขั้นตอนที่ 3: สร้างไฟล์ php ซึ่งเขียนทับไฟล์ view.phtml จริง, แอพ / รหัส / โลคอล / แบบฝึกหัด / CustomSales / Block / การขาย / การสั่งซื้อ / View.php

คลาส Exercise_CustomSales_Block_Sales_Order_View ขยาย Mage_Sales_Block_Order_View
{
    ฟังก์ชันที่มีการป้องกัน _construct ()
    {
        ผู้ปกครอง :: _ สร้าง ();
        $ this-> setTemplate ( 'customsales / ขาย / การสั่งซื้อ / view.phtml');
    }
}

ขั้นตอนที่ 4: คุณควรสร้างไฟล์ local.xml ภายในโฟลเดอร์เลย์เอาต์ (เส้นทางที่เป็นไปได้: แอพ / ออกแบบ / ส่วนหน้า / แพ็คเกจ / ธีม / เลย์เอาต์) นี่สำหรับ print.phtml

เช่น (แอป / ออกแบบ / frontend / rwd / default / layout / local.xml)

<layout>
<sales_order_print>
    <reference name="sales.order.print">
        <action method="setTemplate">
            <template>customsales/sales/order/print.phtml</template>
        </action>
    </reference>
</sales_order_print>

ย้ายไฟล์ view.phtml และ print.phtml ภายใน "แอพ / ออกแบบ / ส่วนหน้า / แพ็คเกจ / ธีม / แม่แบบ / ธรรมเนียม / การขาย / การสั่งซื้อ"

ล้างแคชวีโอไอพี


ไม่จำเป็นต้องเขียนบล็อกใหม่ทั้งหมด ในคำตอบของฉันสร้างของMage_Sales_Block_Order_Viewรับเรียกก่อนและตั้งแม่แบบแล้วsetTemplateเรียกว่าเริ่มต้นโดย XML เค้าโครงจากตัวอย่างของฉันและตั้งแม่แบบกำหนดเอง ฉันต้องการหาวิธีแก้ไขที่ไม่ได้ใช้การเขียนซ้ำเพราะอาจทำให้เกิดข้อขัดแย้งได้
7ochem

7ochem ถูกต้อง ไม่จำเป็นต้องตั้งค่าเทมเพลตในบล็อก ทางออกของ 7ochem นั้นดีและใช้งานได้สำหรับฉัน
Rajan Faldu

มันขึ้นอยู่กับคุณ หากคุณเขียนทับหรือเพิ่มวิธีการ php บางอย่างคุณจะต้องเขียนทับบล็อกมิฉะนั้นคุณเพียงแค่เปลี่ยนแม่แบบผ่าน module.xml หรือ local.xml ทางออกของฉันไม่ส่งผลกระทบต่อเวอร์ชันคุณภาพเยี่ยมใด ๆ
Sohel Rana
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.