Magento multistore .xml переопределяет - есть ли способ получить защищенный глобальный .xml файл?

Итак, я работаю в компании с очень, очень плохим кодом (цикломатическая сложность одной функции, с которой я только что столкнулся, составляет 64, это в основном 900 строк операторов if). Мы запускаем около 30 магазинов Magento за одну установку. Насколько я могу судить, нет единого места, где я могу внести изменения в файл .xml, чтобы они повлияли на все магазины, потому что page.xml существует в теме каждого магазина.

Итак, мой вопрос: есть ли способ предотвратить переопределение файлов .xml или создать новый файл global.xml, который повлияет на все хранилища, или что-то в этом роде? Если бы те, кто ковырялся до меня, просто использовали local.xml для переопределения тех частей page.xml, на которые им нужно было воздействовать, я бы даже не задавал этот вопрос.


person siliconrockstar    schedule 25.03.2014    source источник


Ответы (1)


Итак, это переопределение чистого дизайна, которое вам нужно для всех магазинов и тем, но для той же установки Magento? Я думаю, вы могли бы добавить небольшой модуль, например:

Создайте структуру папок MyModules/LayoutOverrides/etc внутри папки magento/app/code/local.

Внутри этой папки magento/app/code/local/MyModules/LayoutOverrides/etc создайте файл config.xml.

Для файла config.xml вставьте этот контент и сохраните:

<?xml version="1.0"?>
<config>
    <modules>
        <MyModules_LayoutOverrides>
            <version>0.1.0</version>
        </MyModules_LayoutOverrides>
    </modules>
    <frontend>
        <layout>
            <updates>
                <layoutoverrides>
                    <file>mymodules_layoutoverrides.xml</file>
                </layoutoverrides>
            </updates>
        </layout>
    </frontend>
</config>

Вам также необходимо создать файл MyModules_LayoutOverrides.xml внутри папки magento/app/etc/modules с содержимым:

<?xml version="1.0"?>
<config>
    <modules>
        <MyModules_LayoutOverrides>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Page/>  <!-- dependency for override to come after Mage_Page -->
            </depends>
        </MyModules_LayoutOverrides>
    </modules>
</config>

А затем создайте XML переопределения дизайна здесь: app/design/frontend/base/layout/mymodules_layoutoverrides.xml

<?xml version="1.0"?>
<layout>
    <default>
        ...any override you would have for page.xml here
    </default>
</layout>

Все это настолько непроверено, насколько возможно, но с правильной зависимостью, чтобы вы знали, что модуль загружается после того, что вам нужно переопределить, я не вижу причин, по которым это не должно работать. И как модуль вы будете знать, что он работает — независимо от того, какая тема или магазин активированы. Как я уже сказал, не проверено, но я почти уверен, что по умолчанию он вернется в папку base для XML-дизайна, если не будет найден в папке активной темы.

person Christoffer Bubach    schedule 26.03.2014
comment
«Создать модуль» — это тот же вывод, к которому пришел другой разработчик, и я пришел через несколько минут после того, как опубликовал этот вопрос, лол. Однако большое спасибо за ответ, я гарантирую, что зависимость вызвала бы много головной боли. - person siliconrockstar; 26.03.2014
comment
Нет проблем, приятно слышать, что это не было полной тратой времени! :П - person Christoffer Bubach; 26.03.2014