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

У меня установлен пакет дизайна из ThemeForest, который работает нормально, но я пытаюсь создать новую пользовательскую тему. который состоит из таблицы стилей custom.css и файла макета local.xml, который добавляет только ссылку на custom.css.

В Magento Admin значение Система > Конфигурация > Общие > Дизайн / Пакет / Текущее имя пакета соответствует установленному мной пакету дизайна. Это работает нормально, пока я не задаю Design/Themes/Default новую пользовательскую тему, что приводит к игнорированию файла local.xml пакета дизайна. Я могу убедиться в этом, удалив local.xml моей пользовательской темы или заменив ее на тему из пакета дизайна.

То же самое происходит, когда я устанавливаю Дизайн/Темы/Макет на другую тему, теперь файл local.xml из пакета, а файл из Дизайн/ Темы/по умолчанию игнорируются. Я мог бы обойти эту проблему, объединив содержимое всех файлов local.xml в один в разделе Дизайн / Темы / Макет, но это явно нежелательное решение.

Раньше я делал пользовательские темы, но это первый раз, когда у меня возникла эта проблема, у кого-нибудь есть решение?


person thommie    schedule 10.05.2015    source источник
comment
То же самое происходит, когда я добавляю вторую тему и темы => макет к этой теме. теперь файл local.xml пакета и тема по умолчанию игнорируются. Обходной путь для этой проблемы — поместить содержимое файлов local.xml в один файл и установить его как макет, но это, очевидно, не нужное решение.   -  person thommie    schedule 10.05.2015


Ответы (1)


Проблема

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

... если ваша пользовательская тема вызывает файл CSS с именем «styles.css», но приложение Magento не может найти файл в вашей пользовательской теме, Magento перейдет к следующей теме в иерархии, чтобы найти файл ... он продолжит работу по иерархии тем, пока не найдет файл с именем 'styles.css'.

Этот метод построения дизайна называется откатом, потому что приложение «возвращается» к следующему возможному источнику необходимых файлов, чтобы получить и загрузить запрошенный файл.

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

  1. app/design/frontend/$package/$theme/layout/local.xml
  2. app/design/frontend/$package/default/layout/local.xml
  3. app/design/frontend/base/default/layout/local.xml

Важно понимать, что каждый из этих файлов переопределяет следующий, а не дополняет их. Я слышал, что Magento 2.x может исправить эту ситуацию, но для 1.x нам нужно обойти это.

Возможное решение

Я бы решил решить эту проблему, создав простое расширение, которое просто загружает ваш пользовательский файл css в отдельный файл макета. Тогда вам не нужен файл local.xml в вашей новой теме, и он будет продолжать возвращаться к default.

app/etc/modules/My_Theme.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <My_Theme>
            <active>true</active>
            <codePool>local</codePool>
        </My_Theme>
    </modules>
</config>

app/code/local/My/Theme/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <My_Theme>
            <version>0.1.0</version>
        </My_Theme>
    </modules>
    <frontend>
        <layout>
            <updates>
                <my_theme>
                    <file>my_theme.xml</file>
                </my_theme>
            </updates>
        </layout>
    </frontend>
</config>

app/design/frontend/$package/$theme/layout/my_theme.xml:

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="head">
            <action method="addCss"><stylesheet>css/my_theme.css</stylesheet></action>
        </reference>
    </default>
</layout>

При этом также используется метод отката Magento для загрузки файла. Таким образом, вы можете поместить это в skin/frontend/$package/$theme/css/my_theme.css или в подкаталог $package/default/css/.

person fantasticrice    schedule 12.05.2015
comment
Я всегда думал, что local.xml был единственным файлом, который действительно был набором всех файлов local.xml. Но если это не так, все мои предыдущие шаблоны не имели local.xml, поэтому моя пользовательская тема была единственной. - person thommie; 12.05.2015
comment
@thommie - я столкнулся с тем же желанием, чтобы Magento мог загружать local.xml из нескольких уровней дизайна, потому что это упростило бы наследование. Сработало ли мое решение в вашей ситуации? - person fantasticrice; 13.05.2015
comment
это решение помогло мне решить проблему, связанную с тем, что local.xml не используется. Спасибо! - person nicolallias; 24.07.2017