Wie überschreibe ich Kernvorlagendateien aus einem benutzerdefinierten Modul?

10

Ich möchte zwei Dateien überschreiben. Nämlich das view.phtmlund print.phtmlvon Kundenaufträgen.
(Pfad: app/design/frontend/base/default/template/sales/order/)

Ich erstelle ein Modul, in dem ich einen Pfad erstellen möchte, app/design/frontend/base/default/template/<My Module Name>/sales/order/damit der Kern view.phtmlund die print.phtmlDateien nicht überschrieben werden.

Bitte führen Sie mich, wie ich diese Aufgabe erreichen kann.

Rajan Faldu
quelle

Antworten:

13

Sie können dies mit einer Layout-XML-Datei in Ihrem Modul tun. Sie benötigen einen Abschnitt in Ihrem Modul config.xmlwie diesen, damit Magento das Layout-XML Ihres Moduls laden kann (Pfad :) 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>

In dieser Layout-XML-Datei können Sie auf die spezifischen Blöcke verweisen und deren Vorlage ändern.

<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
quelle
@ 7ochem, wie erreicht man dasselbe in magento2?
Prasad Maganti
Sie sollten dies als neue Frage stellen, da es zu weit
gefasst
3

Angenommen, unser Modulname 'CustomSales' und der Paketname "Übung".

Schritt 1: Erstellen Sie eine Modulkonfigurationsdatei in der Datei app / etc / modules / Exercise_CustomSales.xml

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

Schritt 2: Erstellen Sie eine Konfigurationsdatei unter 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>

Schritt 3: Erstellen Sie eine PHP-Datei, die die eigentliche Datei view.phtml überschreibt, app / code / local / Exercise / CustomSales / Block / Sales / Order / View.php

Klasse Exercise_CustomSales_Block_Sales_Order_View erweitert Mage_Sales_Block_Order_View
{
    geschützte Funktion _construct ()
    {
        parent :: _ construct ();
        $ this-> setTemplate ('customales / sales / order / view.phtml');
    }}
}}

Schritt 4: Sie sollten eine local.xml-Datei im Layoutordner erstellen (Möglicher Pfad: app / design / frontend / package / theme / layout). Dies ist für print.phtml.

zB (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>

Verschieben Sie die Datei view.phtml und print.phtml in "app / design / frontend / package / theme / template / customales / sales / order".

Magento-Cache löschen.

Sohel Rana
quelle
Es ist nicht erforderlich, den gesamten Block neu zu schreiben. In meiner Antwort wird der Konstruktor von Mage_Sales_Block_Order_Viewget zuerst aufgerufen und legt die Vorlage fest, dann wird er setTemplatevom Layout-XML aus meinem Beispiel initiiert und legt die benutzerdefinierte Vorlage fest. Ich würde mich für Lösungen entscheiden, die keine Umschreibungen verwenden, da sie möglicherweise Konflikte verursachen können.
7ochem
7ochem ist richtig. Sie müssen die Vorlage nicht in Block setzen. Die Lösung von 7ochem ist gut und hat bei mir funktioniert.
Rajan Faldu
Es hängt von dir ab. Wenn Sie eine PHP-Methode überschreiben oder hinzufügen, müssen Sie den Block überschreiben, andernfalls ändern Sie die Vorlage einfach über module.xml oder local.xml. Meine Lösung wirkt sich wohl auf keine Magento-Version aus.
Sohel Rana