Vários arquivos de layout local.xml em um pacote


13

Digamos que haja dois temas em um pacote:

  • Base (definido como padrão)
  • Criança (Definir como tema principal)

Ambos contêm um local.xml na pasta de layout - Somente o local.xml do tema Filho será carregado, portanto, qualquer atualização de CSS, JS ou layout no local.xml Base não será carregada.

Sem usar o page.xml (permitindo a mesma funcionalidade que o local.xml, mas com herança), como eu teria um arquivo xml para Base e um para Child que são chamados?

Isso exigiria a construção de um módulo com o único objetivo de adicionar um arquivo xml utilizável (por exemplo: base-local.xml)?

Respostas:


9

Você está correto, e esta é uma abordagem válida e usada para sites com vários temas. Existem algumas opções adicionais (pouco conhecidas e raramente usadas) que podem ser usadas para atualizações de layout que se aplicam a diferentes escopos da loja: o identificador da loja e o identificador do tema.

Na superclasse do controlador de ação Mage_Core_Controller_Varien_Action(link) :

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;
}

Para uma loja com o código 'deutsch' e uma configuração de tema do pacote 'padrão', tema 'alemão', os seguintes identificadores se aplicam a quase todas as visualizações, pois a maioria das visualizações as utiliza:

<STORE_deutsch>
<THEME_frontend_default_german>

Por implementação, esses identificadores podem ser utilizados da mesma maneira que <default />.


Ah, isso é útil saber - acho que meu caso de uso é um pouco diferente do que você está sugerindo - Você ainda teria um local.xml em um tema 'base', mas depois usaria o <THEME_frontend_default_german> para direcionar os temas filhos desse tema base local.xml - Não possui um local.xml separado em cada um dos temas filhos? Isso está correto ou estou entendendo mal?
Glo

É isso aí. Infelizmente, os identificadores direcionados se aplicam amplamente, portanto, não há como, por exemplo, "atualizar o modelo de bloco raiz da página catalog_product_view na loja X". Se, no entanto, a loja X precisar de um arquivo JS personalizado em todas as páginas, seria possível usá-lo <STORE_x><action method="addJs" block="head"><file>custom/js.js</file></action></STORE_x>.
benmarks

Muito obrigado, embora não seja especificamente o que eu tinha em mente, essas são algumas informações novas e interessantes.
Glo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.