Множественный local.xml файлы макета в пакете


Допустим, в пакете есть две темы:

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

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

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

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

Author: Fabian Schmengler, 2013-01-25

1 answers

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

Из суперкласса контроллера действий 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;
}

Для магазина с кодом "немецкий" и конфигурацией темы пакета "по умолчанию", "немецкая" тема, следующие дескрипторы будет применяться почти ко всем представлениям, так как большинство представлений используют их:

<STORE_deutsch>
<THEME_frontend_default_german>

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

 9
Author: benmarks, 2013-01-25 16:53:06