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.

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, 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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.