Как перезаписать файлы основных шаблонов из пользовательского модуля?


10

Я хочу перезаписать два файла. А именно view.phtmlи print.phtmlзаказов на продажу.
(путь: app/design/frontend/base/default/template/sales/order/)

Я создаю модуль, в котором я хочу создать путь, app/design/frontend/base/default/template/<My Module Name>/sales/order/чтобы ядро view.phtmlи print.phtmlфайлы не перезаписывались.

Поэтому, пожалуйста, объясните мне, как решить эту задачу.

Ответы:


13

Вы можете сделать это с помощью XML-файла макета внутри вашего модуля. В вашем модуле должен быть раздел, config.xmlподобный этому, чтобы позволить Magento загружать XML-код вашего модуля (path:) 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>

В этом XML-файле макета вы можете ссылаться на конкретные блоки и изменять их шаблон.

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

@ 7очем, как добиться того же в magento2?
Прасад Маганти

Вы должны задать это как новый вопрос, так как он слишком широк, чтобы поместить его в комментарий здесь, и это не то, о чем спрашивает ОП
7ochem

3

Предположим, что наше имя модуля «CustomSales» и имя пакета «Exercise».

Шаг 1: Создайте файл конфигурации модуля в app / etc / modules / Exercise_CustomSales.xml

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

Шаг 2: Создайте файл конфигурации в 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>

Шаг 3: Создайте php-файл, который перезаписывает фактический файл view.phtml, app / code / local / Exercise / CustomSales / Block / Sales / Order / View.php

Класс Exercise_CustomSales_Block_Sales_Order_View extends Mage_Sales_Block_Order_View
{
    защищенная функция _construct ()
    {
        Родитель :: _ конструкт ();
        $ This-> setTemplate ( 'customsales / продажи / заказ / view.phtml');
    }
}

Шаг 4: вам нужно создать файл local.xml внутри папки макета (возможный путь: app / design / frontend / package / theme / layout). Это для print.phtml.

например (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>

Переместите файл view.phtml и print.phtml в папку «app / design / frontend / package / theme / template / customsales / sales / order».

Очистить кэш magento.


Нет необходимости переписывать весь блок. В моем ответе конструктор Mage_Sales_Block_Order_Viewget сначала вызывается и устанавливает шаблон, затем setTemplateвызывается get, инициируемый компоновочным XML из моего примера, и устанавливает пользовательский шаблон. Я хотел бы пойти на решения, которые не используют переписывания, поскольку они могут вызвать конфликты.
7очев

7очем верно. Нет необходимости устанавливать шаблон в блоке. Решение 7ochem хорошо, и оно сработало для меня.
Раджан Фалду

Это зависит от вас. Если вы перезаписываете или добавляете какой-либо метод php, вам нужно перезаписать блок, иначе вы просто измените шаблон через module.xml или local.xml. Полагаю, мое решение не влияет на версию magento.
Сохель Рана
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.