Как сделать макет модуля, который будет отображаться во всех темах
Вот ситуация: у меня есть несколько самодельных модулей, все они протестированы и работают с использованием темы по умолчанию. Затем мы купили и установили новую тему. Переключился на новую тему, и модули не отображаются. После нескольких попыток/неудачных тестов я обнаружил, что мне нужно скопировать соответствующие файлы макета и шаблонов в соответствующие папки недавно установленной темы.
Итак, мой вопрос: что я должен сделать, чтобы все мои модули работали с любым тема установлена после установки модуля?
5 answers
Поместите все в пути
base/default
.
Пример:
app/design/frontend/base/default
skin/frontend/base/default
Суровая правда в том, что вы не можете действительно гарантировать, что они будут. Размещение ваших файлов в base/default
(или default/default
, если они переопределяют основные шаблоны - поскольку вы не хотите перезаписывать базовые файлы при установке модуля, хотя это вынуждает вас сохранять дубликаты для enterprise edition) гарантирует, что они станут резервными, но файлы тем всегда будут иметь приоритет высшего уровня.
Большинство модулей поставляются с руководством по установке, в котором упоминается, как копировать файлы шаблонов к теме пользователя, если у них есть собственная тема. Это, пожалуй, лучшее, что вы можете сделать.
Одна вещь, которую мы использовали пару раз, - это [Фабрицио Бранка][1] [Пользовательский запасной вариант][2] modlue. Это очень полезный модуль для определения вашей собственной резервной иерархии пользовательских тем. Единственное, что вы можете сделать, это указать:
custom/theme
base/default
default/default
Затем любые модули, которые помещают свои собственные шаблоны в тему default/default
. Не будет работать, если они пытаются переопределить пакеты base/default
.
Ты можно указать любое количество пакетов/тем в пользовательской резервной иерархии.
[1]: http://www.fabrizio-branca.de / [2]: http://www.fabrizio-branca.de/custom-design-fallbacks-in-magento.html
Любой файл шаблона и макета в base/default
будет загружен, если он не будет переопределен где-то по пути. Однако, если ваш пользовательский модуль представляет собой какой-то виджет, вам следует убедиться, что он отображается там, где это необходимо.
Если, например, вы вносите изменения, которые отображаются на странице продукта через getChildHtml
, то эти вызовы также должны быть в соответствующей теме.
Однако, если ваши шаблоны модулей сами по себе являются страницами и они не загружаются из base/default
, то что-то блокирует макет конфигурация, и вы должны найти, что.
На этот вопрос нет простого ответа. Это зависит от имеющихся у вас модулей. Например, некоторые компании-модули, переопределяющие основные файлы. Поэтому вам следует сначала проверить, какие файлы доступны в app/etc/modules
и app/code/local/Mage
, app/code/community/Mage
папки. Как вы, возможно, знаете, первая папка - это папка инициализации модуля, в которой вы можете отключить или включить модули, связанные файлами xml. Последние две папки (если они доступны) являются папками, переопределяющими основной код.
Затем откройте один из xml-файлов файл, доступный в каталоге etc/modules
. Вы увидите что-то вроде следующего:
<?xml version="1.0"?>
<config>
<modules>
<Company_Namespace>
<active>true</active>
<codePool>local</codePool>
</Company_Namespace>
</modules>
Здесь важными частями являются Company
и Namespace
. При посещении папок app/code/local
или app/code/community
вы увидите папку с именем Company
, за которой следует подпапка с именем Namespace
.
При поиске Namespace
вы увидите подпапку с именем /etc
. В этой папке хранится файл конфигурации, связанный с модулем config.xml
. В этом файле есть строки конфигурации, связанные с модулем, на которые вы можете ссылаться, какие файлы связаны с этим модуль.
Как я уже сказал в своей первой строке, этим трудно управлять.