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

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

В Magento Admin значение System > Configuration > General > Design / Package / Current Package Name установлено на установочный пакет, который я установил. Это работает нормально, пока я не установлю Design / Themes / Default на мою новую пользовательскую тему, которая вызывает local.xml файл дизайна пакета, который следует игнорировать. Я могу проверить это, удалив local.xml моей пользовательской темы или заменив ее на ту, которая находится в пакете дизайна.

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

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

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/ подкаталог.

Другие вопросы по тегам