Jak zastąpić podstawowe pliki szablonów z niestandardowego modułu?


10

Chcę zastąpić dwa pliki. Mianowicie view.phtmli print.phtmlzleceń sprzedaży.
(ścieżka: app/design/frontend/base/default/template/sales/order/)

Tworzę moduł, w którym chcę utworzyć ścieżkę, app/design/frontend/base/default/template/<My Module Name>/sales/order/aby rdzeń view.phtmli print.phtmlpliki nie zostały nadpisane.

Więc proszę, poprowadź mnie, jak osiągnąć to zadanie.

Odpowiedzi:


13

Możesz to zrobić z plikiem XML układu w swoim module. Musisz mieć sekcję w module config.xmlpodobną do tej, aby Magento załadował układ modułu XML (ścieżka:) 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>

W tym pliku XML układu można odwoływać się do określonych bloków i zmieniać ich szablon.

<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, jak to osiągnąć w magento2?
prasad maganti

Powinieneś zadać to pytanie jako nowe pytanie, ponieważ jest ono zbyt szerokie, aby umieścić je w komentarzu tutaj, a nie jest to, o co prosi OP
7ochem

3

Załóżmy, że nasza nazwa modułu to „CustomSales” i nazwa pakietu „Exercise”.

Krok 1: Utwórz plik konfiguracyjny modułu w app / etc / modules / Exercise_CustomSales.xml

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

Krok 2: Utwórz plik konfiguracyjny w 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>

Krok 3: Utwórz plik php, który zastąpi rzeczywisty plik view.phtml, app / code / local / Exercise / CustomSales / Block / Sales / Order / View.php

klasa Exercise_CustomSales_Block_Sales_Order_View rozszerza Mage_Sales_Block_Order_View
{
    funkcja chroniona _construct ()
    {
        parent :: _ construct ();
        $ this-> setTemplate ('Customales / sales / order / view.phtml');
    }
}

Krok 4: należy utworzyć plik local.xml w folderze układu (Możliwa ścieżka: app / design / frontend / package / theme / layout). To jest dla print.phtml.

np. (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>

Przenieś pliki view.phtml i print.phtml do „app / design / frontend / package / theme / template / Customales / sales / order”.

Wyczyść pamięć podręczną Magento.


Nie ma potrzeby przepisywania całego bloku. W mojej odpowiedzi Mage_Sales_Block_Order_Viewnajpierw wywoływany jest konstruktor get's i ustawia szablon, a następnie setTemplatewywoływany get przez XML układu z mojego przykładu i ustawia szablon niestandardowy. Chciałbym wybrać rozwiązania, które nie wykorzystują przepisywania, ponieważ mogą potencjalnie powodować konflikty.
7ochem

7ochem ma rację. Nie ma potrzeby ustawiania szablonu w bloku. Rozwiązanie 7ochem jest dobre i zadziałało dla mnie.
Rajan Faldu

To zależy od ciebie. Jeśli zastąpisz lub dodasz jakąś metodę php, musisz zastąpić blok, w przeciwnym razie po prostu zmienisz szablon poprzez module.xml lub local.xml. Moje rozwiązanie nie działa na żadną wersję Magento.
Sohel Rana
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.