Файл 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 будет искать его в следующем порядке:
app/design/frontend/$package/$theme/layout/local.xml
app/design/frontend/$package/default/layout/local.xml
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/
подкаталог.