Plusieurs fichiers de disposition local.xml dans un package


13

Disons qu'il y a deux thèmes dans un package:

  • Base (définie par défaut)
  • Enfant (défini comme thème principal)

Les deux contiennent un local.xml dans le dossier de mise en page - Seul le local.xml du thème enfant sera chargé, de sorte que les mises à jour CSS, JS ou de mise en page dans le local local.xml ne seront pas chargées.

Sans utiliser page.xml (permettant ainsi les mêmes fonctionnalités que local.xml mais avec héritage), comment pourrais-je avoir un fichier xml pour Base et un pour Child que les deux soient appelés?

Cela nécessiterait-il la construction d'un module dans le seul but d'ajouter un fichier xml utilisable (par exemple: base-local.xml)?

Réponses:


9

Vous avez raison, et c'est une approche valide et utilisée pour les sites avec plusieurs thèmes. Il existe quelques options supplémentaires (peu connues, rarement utilisées) qui peuvent être utilisées pour les mises à jour de mise en page qui s'appliquent à différentes étendues de magasin: le handle de magasin et le handle de thème.

Depuis la superclasse du contrôleur d'action Mage_Core_Controller_Varien_Action(lien) :

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

Pour un magasin avec le code «deutsch» et une configuration de thème de package «par défaut», thème «allemand», les poignées suivantes s'appliqueraient à presque toutes les vues, car la plupart des vues les utilisent:

<STORE_deutsch>
<THEME_frontend_default_german>

Par implémentation, ces poignées peuvent être utilisées de la même manière que <default />.


Ah, c'est utile de savoir - je pense que mon cas d'utilisation est légèrement différent de ce que vous suggérez cependant - Vous auriez toujours un local.xml dans un thème 'base' mais utiliser ensuite le <THEME_frontend_default_german> pour cibler les thèmes enfants à partir de ce thème de base local.xml - Vous n'avez pas de local.xml distinct dans chacun des thèmes enfants? Est-ce exact ou ai-je un malentendu?
Glo

C'est ça. Malheureusement, les descripteurs ciblés s'appliquent largement, il n'y a donc aucun moyen, par exemple, de "mettre à jour le modèle de bloc racine pour la page catalog_product_view dans le magasin X". Si, cependant, le magasin X a besoin d'un fichier JS personnalisé sur toutes les pages, il serait possible de l'utiliser <STORE_x><action method="addJs" block="head"><file>custom/js.js</file></action></STORE_x>.
benmarks

Merci beaucoup, même si ce n'est pas précisément ce que j'avais en tête, ce sont de nouvelles informations intéressantes, bravo.
Glo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.