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


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>

@ 7ochem, як досягти того ж у magento2?
prasad maganti

Вам слід задати це як нове запитання, оскільки воно занадто широке, щоб розмістити його в коментарі тут, і це не те, що задає ОП
7ochem

3

Припустимо, наша назва модуля "CustomSales" та назва пакету "Вправа".

Крок 1: Створіть файл конфігурації модуля в app / etc / module / 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, додаток / код / ​​локальний / Вправа / CustomSales / Блок / Продаж / Замовлення / View.php

клас Exercise_CustomSales_Block_Sales_Order_View розширює Mage_Sales_Block_Order_View
{
    захищена функція _construct ()
    {
        материнський :: _ construct ();
        $ this-> setTemplate ('customsales / sales / order / view.phtml');
    }
}

Крок 4: ви повинні створити файл local.xml всередині папки макета (Можливий шлях: app / design / frontend / package / тема / 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 / topic / template / customsales / sales / order".

Очистити кеш-пам'ять magento.


Не потрібно переписувати весь блок. У моїй відповіді Mage_Sales_Block_Order_Viewспочатку викликається конструктор get і встановлює шаблон, потім setTemplateget викликається ініційованим макетом XML з мого прикладу і встановлює користувацький шаблон. Я хотів би знайти рішення, які не використовують переписування, оскільки вони потенційно можуть спричинити конфлікти.
оч.

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

Це залежить від вас. Якщо ви перезаписуєте або додаєте якийсь метод php, тоді вам потрібно перезаписати блок, інакше ви просто зміните шаблон через module.xml або local.xml. Моє рішення не впливає на будь-яку версію magento, я думаю.
Sohel Rana
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.