Несколько local.xml файлов макета в пакете
Вопрос
Допустим, в пакете есть две темы:
- Базовая (установлена по умолчанию)
- Ребенок (Задан в качестве основной темы)
Оба содержат local.xml в папке layout - Будет загружена только local.xml из дочерней темы, поэтому любые обновления CSS, JS или layout в базовой local.xml не загружаются.
Без использования page.xml (таким образом, с учетом той же функциональности, что и local.xml, но с наследованием), как бы у меня был XML-файл для базы и один для дочернего файла, которые оба вызываются?
Потребует ли это создания модуля с единственной целью добавления полезного XML-файла (например:base-local.xml )?
Решение
Вы правы, и это допустимый и используемый подход для сайтов с несколькими темами.Существует пара дополнительных (малоизвестных, редко используемых) опций, которые можно использовать для обновлений макета, применимых к различным областям хранения:дескриптор хранилища и дескриптор темы.
Из суперкласса контроллера действий Mage_Core_Controller_Varien_Action
(ссылка):
public function addActionLayoutHandles()
{
$update = $this->getLayout()->getUpdate();
// load store handle
$update->addHandle('STORE_'.Mage::app()->getStore()->getCode());
// load theme handle
$package = Mage::getSingleton('core/design_package');
$update->addHandle(
'THEME_'.$package->getArea().'_'.$package->getPackageName().'_'.$package->getTheme('layout')
);
// load action handle
$update->addHandle(strtolower($this->getFullActionName()));
return $this;
}
Для магазина с кодом "deutsch" и конфигурацией темы пакета "по умолчанию", "немецкой" темы, следующие дескрипторы будут применяться практически к каждому представлению, поскольку большинство представлений используют их:
<STORE_deutsch>
<THEME_frontend_default_german>
При реализации эти дескрипторы могут использоваться практически так же, как <default />
.