Расширение Magento необходимо переопределить шаблон - PullRequest
4 голосов
/ 03 ноября 2011

Я работаю над простым расширением для своего магазина, и оно должно переопределить файл шаблона.

Данный шаблон используется для генерации каждой позиции в списке позиций в заказе. Чтобы увидеть, о чем я говорю, вы можете перейти в «Моя учетная запись» -> «Мои заказы», ​​выбрать заказ и затем прокрутить вниз, чтобы увидеть таблицу в разделе «Заказанные товары». Файл шаблона по умолчанию, который я пытаюсь заменить, - это sales / order / items / renderer / default.phtml.

Я успешно настроил расширение для использования собственного файла layout.xml. Я могу, например, отключить различные блоки на странице. Мой код для изменения шаблона, однако, не работает. Я подозреваю, что мои ссылочные имена неверны, но я точно не знаю.

Вот что у меня есть:

<?xml version="1.0"?>
<layout version="0.1.0">
    <sales_order_view>
        <reference name="my.account.wrapper">
            <reference name="sales.order.view">
                <reference name="order.items">
                    <reference name="sales.order.item.renderer.default">
                        <action method="setTemplate">
                            <template>groupname_extensionname/sales/order/items/renderer/default.phtml</template>
                        </action>
                    </reference>
                </reference>
            </reference>
        </reference>
    </sales_order_view>
</layout>

Может ли кто-нибудь предоставить исправления, которые мне нужны, в моем XML (и в других местах, если это необходимо)? Заранее спасибо.

Edit:

Вот моя модифицированная версия XML Бена, которая работала (он пропустил только аргумент, который было легко добавить):

<?xml version="1.0"?>
<layout version="0.1.0">
    <sales_order_view>
        <reference name="order_items">
            <action method="addItemRender">
                <arg1>default</arg1>
                <arg2>sales/order_item_renderer_default</arg2>
                <arg3>groupname_extensionname/sales/order/items/renderer/default.phtml</arg3>
            </action>
        </reference>
    </sales_order_view>
</layout>

Edit:

Я обнаружил, что вы можете скопировать стандартные теги xml для аргументов, поэтому вместо arg1, arg2, arg3 вы можете иметь тип, блок, шаблон.

<?xml version="1.0"?>
<layout version="0.1.0">
    <sales_order_view>
        <reference name="order_items">
            <action method="addItemRender">
                <type>default</type>
                <block>sales/order_item_renderer_default</block>
                <template>groupname_extensionname/sales/order/items/renderer/default.phtml</template>
            </action>
        </reference>
    </sales_order_view>
</layout>

Ответы [ 2 ]

4 голосов
/ 03 ноября 2011

Макет <references/> не работает так. Внешние теги (<sales_order_view/>) называются дескрипторами, и затем первый уровень тегов внутри дескриптора - это команда, которая либо создает, либо получает ссылку на объект блока, а затем слой внутри этого используется для вызова блока. методы через узел <action/>. (двумя исключениями являются <remove/> и <update>, которые сканируются отдельно от процесса создания блока и могут быть размещены где угодно).

Таким образом, ваше обновление макета XML будет выглядеть следующим образом.

<sales_order_view>
    <reference name="name.of.block.in.layout">
        <action method="setTemplate">                
            <template>groupname_extensionname/sales/order/items/renderer/default.phtml</template>
        </action>
    </reference>
</sales_order_view>

Несколько других советов, которые помогут вам в пути

  1. Вам нужно заменить «name.of.block.in.layout» на имя, которое Magento дает блоку с шаблоном sales/order/items/renderer/default.phtml

  2. Убедитесь, что вы добавляете свой макет XML в макет ADMIN.

  3. Убедитесь, что вы используете <depends/> в app/etc/modules/Foo_Bar.xml, чтобы обеспечить загрузку модуля после модуля Mage_Adminhtml.

  4. Вполне возможно, что Magento генерирует блок, который вы ищете в коде PHP, что означает, что вы не сможете использовать макет так, как вы его используете

  5. Может быть проще взглянуть на другую тему администратора по умолчанию для Magento (или использовать тему поиска, которая поставляется с современными версиями Magento и является темой администратора по умолчанию), и просто заменить файл phtml через шаблон иерархии.

(Макеты Magento довольно сложны, мне понадобилось небольшая книга , чтобы объяснить их.)

2 голосов
/ 03 ноября 2011

Хех, одна хорошая вещь в ссылках заключается в том, что они работают через это глобальное пространство объекта макета, поэтому вам не нужно делать никаких вложений. Престижность за проработку этого до макета xml; это мощно!

Думаю, вам нужно заменить средство визуализации элементов по умолчанию, которое устанавливается в файле LXML модуля продаж (см. Sales.xml). Они добавляются в класс блока Mage_Sales_Block_Order_Items (или sales/order_items в обозначении группы классов) с помощью метода addItemRender(), который происходит от Mage_Sales_Block_Items_Abstract. Вам необходимо заменить средство визуализации, хранящееся в ключе default массива _itemRenderers, и это можно сделать, просто выполнив следующее:

<sales_order_view>
    <reference name="order_items">
        <action method="addItemRender">
            <arg1>default</arg1>
            <arg2>groupname_extensionname/sales/order/items/renderer/default.phtml</arg2>
        </action>
    </reference>
</sales_order_view>

Дайте мне знать, если это не сработает, потому что это не должно занимать намного больше.

...