Существует ли файл XML локального макета темы, отличный от local.xml?

14

Я создал тему, создав и отредактировав следующий файл:

frontend/mypackage/default/layout/local.xml

У меня есть представление магазина "site1", и я хочу сделать исключения в локальном.xml по умолчанию для mypackage, поэтому я создал этот файл:

frontend/mypackage/site1/layout/local.xml

Однако, как только я создаю этот файл, Magento пропускает изменения по умолчанию local.xml.

Как мне сказать Magento использовать local.xml по умолчанию и добавить к нему изменения в local.xml сайта site1?

Джерард Нийбоер
источник
Ни за что. Сожалею. Хороший вопрос, кстати.
user487772
Я сталкиваюсь с этим точно таким же сценарием. Я должен был расширить local.xml из темы по умолчанию, а не полностью заменить его. Жаль, что он полностью заменяет выбранную подтему.
Аксель
Нет ли ничего похожего на default.xml? Или мы могли бы взломать код ядра Magento, который перебирает xml-файлы, чтобы также проверить наличие файла default.xml?
Джерард Нийбоер

Ответы:

7

Начиная с Magento 1.9 вы можете добавлять пользовательские обновления макета etc/theme.xmlследующим образом:

<theme>
    <layout>
        <updates>
            <my_theme>
                <file>my_theme.xml</file>
            </my_theme>
        </updates>
    </layout>
</theme>

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

К сожалению, та же проблема связана с theme.xml, что используется только тот из вашей актуальной темы, а не из родительских тем. Но дублирования намного меньше.

Пример theme.xmlдля дочерней темы:

<theme>
    <layout>
        <updates>
            <my_theme>
                <file>my_theme.xml</file>
            </my_theme>
            <my_child_theme>
                <file>my_child_theme.xml</file>
            </my_child_theme>
        </updates>
    </layout>
</theme>

Источник и дополнительная информация: http://alanstorm.com/magento_infinite_fallback_theme_xml

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

Magento не объединяет изменения local.xml с другими файлами local.xml. Резервный вариант Magento работает так, что любой файл, найденный в текущей теме / пакете, будет предпочтительным и будет использоваться над любым другим файлом темы / пакета с таким же именем.

Таким образом, вы не можете создать объединенное переопределение. Это будет возможно в Magento 2, но невозможно в Magento 1.x.

К сожалению, вам придется скопировать ее в вашу локальную тему из настроек по умолчанию и внести в нее изменения.

Удачи.

philwinkle
источник
2
+1. Это, безусловно, может быть достигнуто программно, но определенно не будет стоить усилий.
user487772
3

Фил абсолютно прав, но теоретически есть обходной путь (хотя и не такой красивый).

Вы можете создать собственный модуль, который представит обновление макета. Затем в модуле вы можете проверить, является ли представление магазина не тем, которое требуется, и удалить это обновление макета.

Недостаток этого подхода в том, что вы жестко закодируете представление магазина. И в целом это не выглядит красиво.

user487772
источник