Làm cách nào để ghi đè lên các tệp mẫu lõi từ một mô-đun tùy chỉnh?


10

Tôi muốn ghi đè lên hai tập tin. Cụ thể là view.phtmlprint.phtmlcác đơn đặt hàng bán.
(đường dẫn app/design/frontend/base/default/template/sales/order/:)

Tôi đang tạo một mô-đun trong đó tôi muốn tạo một đường dẫn app/design/frontend/base/default/template/<My Module Name>/sales/order/để lõi view.phtmlprint.phtmltệp không bị ghi đè.

Vì vậy, xin vui lòng hướng dẫn tôi làm thế nào để đạt được nhiệm vụ này.

Câu trả lời:


13

Bạn có thể làm điều này với một tệp XML bố trí bên trong mô-đun của bạn. Bạn cần phải có một phần trong mô-đun của mình config.xmlnhư thế này để Magento tải XML bố cục của mô-đun của bạn (đường dẫn 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>

Trong tệp XML bố trí này, bạn có thể tham chiếu các khối cụ thể và thay đổi mẫu của chúng.

<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, làm thế nào để đạt được điều tương tự trong magento2?
prasad maganti

Bạn nên hỏi câu hỏi này như một câu hỏi mới vì nó quá rộng để đưa nó vào một bình luận ở đây và không phải là những gì OP đang hỏi
7ochem

3

Giả sử Tên mô-đun 'CustomSales' và Tên gói "Bài tập".

Bước 1: Tạo tệp cấu hình mô-đun thành ứng dụng / etc / mô-đun / Bài tập_ustomSales.xml

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

Bước 2: Tạo tệp cấu hình trong ứng dụng / code / local / Bài tập / 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>

Bước 3: Tạo một tệp php ghi đè lên tệp view.phtml thực tế, ứng dụng / mã / cục bộ / Bài tập / CustomSales / Chặn / Bán hàng / Đặt hàng / View.php

lớp Bài tập_CustomSales_Block_Sales_Order_View mở rộng Mage_Sales_Block_Order_View
{
    hàm được bảo vệ _construct ()
    {
        cha mẹ :: _ xây dựng ();
        $ this-> setTemplate ('hải quan / bán hàng / đơn hàng / view.phtml');
    }
}

Bước 4: bạn nên tạo một tệp local.xml bên trong thư mục bố cục (Đường dẫn có thể: app / design / frontend / pack / theme / layout). Đây là cho print.phtml.

ví dụ: (ứng dụng / thiết kế / 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>

Di chuyển tập tin view.phtml và print.phtml bên trong "app / design / frontend / pack / theme / template / Navyales / sales / order".

Xóa bộ nhớ cache magento.


Không cần phải viết lại toàn bộ khối. Trong câu trả lời của tôi, hàm tạo của Mage_Sales_Block_Order_Viewget được gọi đầu tiên và đặt mẫu, sau đó setTemplateđược gọi được khởi tạo bởi XML bố cục từ ví dụ của tôi và đặt mẫu tùy chỉnh. Tôi muốn tìm giải pháp không sử dụng viết lại vì chúng có thể gây ra xung đột.
7ochem

7ochem là đúng. Không cần thiết lập Mẫu trong Khối. Giải pháp của 7ochem là tốt và nó hiệu quả với tôi.
Rajan Faldu

Nó phụ thuộc vào bạn. Nếu bạn ghi đè hoặc thêm một số phương thức php thì bạn cần ghi đè lên khối nếu không bạn chỉ cần thay đổi khuôn mẫu thông qua module.xml hoặc local.xml. Giải pháp của tôi không ảnh hưởng đến bất kỳ phiên bản magento nào, tôi đoán vậy.
Sohel Rana
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.