Bagaimana cara menimpa file templat inti dari modul khusus?

10

Saya ingin menimpa dua file. Yaitu view.phtmldan print.phtmldari pesanan penjualan.
(path: app/design/frontend/base/default/template/sales/order/)

Saya membuat modul di mana saya ingin membuat jalur app/design/frontend/base/default/template/<My Module Name>/sales/order/agar inti view.phtmldan print.phtmlfile tidak ditimpa.

Jadi tolong bantu saya bagaimana mencapai tugas ini.

Rajan Faldu
sumber

Jawaban:

13

Anda bisa melakukan ini dengan file XML layout di dalam modul Anda. Anda perlu memiliki bagian dalam modul Anda config.xmlseperti ini untuk membiarkan Magento memuat tata letak modul XML Anda (jalur:) 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>

Dalam file XML tata letak ini Anda dapat referensi blok tertentu dan mengubah template mereka.

<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
sumber
@ 7ochem, bagaimana cara mencapai yang sama di magento2?
prasad maganti
Anda harus mengajukan ini sebagai pertanyaan baru karena terlalu luas untuk dimasukkan ke dalam komentar di sini dan bukan apa yang diminta OP
7ochem
3

Misalkan Nama Modul kami 'CustomSales' dan Nama Paket "Latihan".

Langkah 1: Buat file konfigurasi modul ke app / etc / modules / Exercise_CustomSales.xml

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

Langkah 2: Buat file config di bawah app / code / local / Exercise / 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>

Langkah 3: Buat file php yang menimpa file view.phtml yang sebenarnya, aplikasi / kode / lokal / Latihan / CustomSales / Blok / Penjualan / Pesanan / View.php

Latihan kelas_CustomSales_Block_Sales_Order_View meluas Mage_Sales_Block_Order_View
{
    fungsi yang dilindungi _construct ()
    {
        parent :: _ construct ();
        $ this-> setTemplate ('customales / sales / order / view.phtml');
    }
}

Langkah 4: Anda harus membuat file local.xml di dalam folder layout (Kemungkinan jalur: app / design / frontend / package / theme / layout). Ini untuk print.phtml.

mis. (app / design / 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>

Pindahkan file view.phtml dan print.phtml ke dalam "app / design / frontend / package / theme / template / customales / sales / order".

Hapus cache magento.

Sohel Rana
sumber
Tidak perlu menulis ulang seluruh blok. Dalam jawaban saya, konstruktor Mage_Sales_Block_Order_Viewget dipanggil pertama dan menetapkan template, kemudian setTemplatedipanggil dipanggil oleh layout XML dari contoh saya dan set template kustom. Saya ingin mencari solusi yang tidak menggunakan penulisan ulang karena berpotensi menyebabkan konflik.
7ochem
7ochem benar. Tidak perlu mengatur Templat di Blok. Solusi 7ochem baik dan itu bekerja untuk saya.
Rajan Faldu
Itu tergantung pada Anda. Jika Anda menimpa atau menambahkan beberapa metode php maka Anda perlu menimpa blok jika tidak, Anda hanya mengubah templat melalui module.xml atau local.xml. Solusi saya tidak mempengaruhi versi magento, kurasa.
Sohel Rana