Несколько файлов макета local.xml в пакете


13

Скажем, в пакете две темы:

  • База (по умолчанию)
  • Ребенок (Установить как главную тему)

Оба содержат local.xml в папке макета - будет загружен только local.xml из дочерней темы, поэтому любые обновления CSS, JS или макета в Base local.xml не загружаются.

Без использования page.xml (с учетом той же функциональности, что и local.xml, но с наследованием), как у меня будет XML-файл для Base и один для Child, который будет вызываться?

Требуется ли для этого создание модуля с единственной целью добавления пригодного для использования XML-файла (например, base-local.xml)?

Ответы:


9

Вы правы, и это правильный и используемый подход для сайтов с несколькими темами. Существует несколько дополнительных (малоизвестных, редко используемых) опций, которые можно использовать для обновлений макета, которые применяются к различным областям хранения: дескриптор магазина и дескриптор темы.

Из суперкласса контроллера действий 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' и конфигурацией темы пакета 'default', 'German' theme, следующие дескрипторы будут применяться почти ко всем представлениям, так как большинство представлений используют их:

<STORE_deutsch>
<THEME_frontend_default_german>

При реализации эти дескрипторы могут использоваться практически так же, как <default />.


Ах, это полезно знать - я думаю, что мой вариант использования немного отличается от того, что вы предлагаете, хотя - у вас все равно будет один local.xml в «базовой» теме, но затем используйте <THEME_frontend_default_german> для нацеливания на дочерние темы из этой базовой темы local.xml - нет отдельного local.xml в каждой из дочерних тем? Это правильно или я неправильно понимаю?
Glo

Вот и все. К сожалению, целевые дескрипторы применяются в широком смысле, поэтому, скажем, «обновить шаблон корневого блока для страницы catalog_product_view в хранилище X невозможно». Однако, если для хранилища X требуется специальный файл JS на всех страницах, его можно использовать <STORE_x><action method="addJs" block="head"><file>custom/js.js</file></action></STORE_x>.
отметки

Большое спасибо, хотя не совсем то, что я имел в виду, это интересная новая информация, ура.
Glo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.