Каков правильный способ / подход к изменению шаблона Magento?

15

Пожалуйста, предложите мне правильный подход, я хочу настроить страницу "EMAIL to Friend" во всплывающем окне, когда пользователь нажимает на кнопку (по электронной почте этот продукт). Включив подсказку шаблона, я обнаружил, что кнопка отображается с

интерфейс / RWD / по умолчанию / шаблон / Каталог / продукта / вид / sharing.phtml

И соответствующий файл макета catalog.xml(в frontend / rwd / default / layout)

Поэтому я создал local.xmlв той же папке, где catalog.xmlсуществует, с помощью следующего кода (только то, что я дал test.phtmlвместо sharing.phtml, просто «Отладка»)

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

Но ничего не происходит, я имею в виду, как я могу изменить (перезаписать) дизайн темы по умолчанию, не изменяя существующие xmlи phtmlфайлы?

Димаг Хараб
источник

Ответы:

10

Это то, что вы должны положить в свой local.xmlфайл.

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

Ошибки, которые вы сделали

  • Вы использовали два маркера обновления макета : defaultи catalog-product-view. Это не правильно. Вам нужен только один дескриптор обновления макета. Право, которое вы должны использовать здесьcatalog_product_view

  • Так catalog-product-viewчто неизвестно для magento. Правильное имяcatalog_product_view

  • Поскольку блок совместного использования уже определен через catalog.xml, теперь вам нужно обратиться к этому блоку, а затем изменить шаблон, добавив действие setTemplate. Это то, что делает приведенный выше скрипт.

Надеюсь, вы поняли идею

Раджив К Томи
источник
Я использовал ваш local.xml, он по-прежнему показывает существующий (я создал test.phtml) в указанной папке
Dimag Kharab
ты очистил свой кеш? это должно сработать, если вы все сделали правильно.
Раджив К Томи
в моем случае отключено кэширование, и я также переиндексировал (я думаю, это не нужно)
Димаг Хараб
добавьте это <reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>прямо под узлом <catalog_product_view>. и посмотрите, доступно ли содержимое файла test.phtml в нижней части страницы просмотра продукта
Rajeev K Tomy
Не повезло, братан, до сих пор
Димаг Хараб
10

Я постараюсь дать общий ответ.

Как изменить шаблоны

В вашей теме вы можете переопределить любые phtmlфайлы из темы по умолчанию или родительской темы. Скопируйте исходный файл app/design/frontend/[package]/[theme]/template/[path/to/phtml]и внесите изменения.

Если у вас еще нет специальной темы для проекта, например, потому что вы только что купили тему, обязательно создайте ее на

app/design/frontend/[original-package]/[project-name]

Он унаследует от [original-package]/[default]вас, вам не нужно копировать все по умолчанию, только файлы, в которые нужно внести изменения.

Модульные изменения

Альтернативой переопределению phtmlфайла является изменение пути к шаблону. Обычно это можно сделать в макете XML следующим образом:

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

Но это предназначено для использования модулями, которым нужно переключать шаблон, а не для конкретных изменений темы. Новый шаблон должен быть в base/defaultто время.

Как использовать local.xml / theme.xml

local.xmlФайл должен находиться в каталоге актуальной темы , которую вы используете, т.е.

app/design/frontend/[package]/[theme]/layout

Несколько local.xmlфайлов в резервной иерархии не учитываются. Первый из них, который можно найти, используется:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(при условии иерархии по умолчанию и никакой пользовательской иерархии)

Как внести изменения

Вы должны иметь только изменения в local.xml, но не повторять определения, которые уже есть в исходных XML-файлах. Это также означает, что следует избегать копирования файлов XML из темы по умолчанию, чтобы вносить изменения непосредственно в файлы. Держите layoutкаталог вашей темы в чистоте!

Типичными элементами local.xmlявляются <remove>полное удаление существующих блоков <action method="unsetChild">и <action method="append">перемещение блока от одного родителя к другому или вызов любых других методов в существующих блоках для изменения их поведения.

Magento 1.9

Начиная с Magento 1.9, лучше всего не использовать layout/local.xmlэти изменения, ноetc/theme.xml

Короче говоря, вы можете добавить обновление макета в app / design / frontend / yourpackage / etc / theme.xml. Преимущество заключается в том, что вы можете контролировать порядок загрузки обновлений макета. До Magento 1.9 файл local.xml всегда загружался последним, и после него невозможно было выполнить директивы компоновки.

Я больше не использую local.xml для модификации темы проекта. Я думаю, что local.xml просто используется в целях обратной совместимости (в 1.9 и выше), так как больше нет смысла его использовать. Local.xml также исключен в Magento 2 ( https://github.com/magento/magento2/issues/1037 ).

Источник: https://erfanimani.com/dont-use-local-xml/

Фабиан Шменглер
источник