Magento XML utilisant avant / après pour placer des blocs ne fonctionne presque jamais

Je suis un développeur front-end de Magento, j’ai construit pas mal de mes propres thèmes et je veux mieux comprendre le positionnement des blocs XML de Magento …

J’utilise normalement un fichier local.xml pour tout manipuler, je peux définir un bloc comme suit:

      

Cela créerait un bloc sur la page d’accueil ( cms_index_index ) et comme le bloc est créé à un niveau sous la root , j’appellerais normalement le bloc en ajoutant:

 getChildHtml('exampleBlock') ?> 

… à 1column.phtml (ou 2columns-left / right.phtml , 3columns.phtml etc.). Le bloc peut être placé sur n’importe quelle page en substituant cms_index_index à la balise de page appropriée.

Je vois des choses comme les suivantes dans les principaux fichiers XML et dans les didacticiels:

    

content est un bloc qui fait partie de la structure générale de la page de magento et, d’après ce que je comprends, before="content" devrait le placer là où vous le souhaitez, sans avoir besoin d’utiliser getChildHtml('exampleBlock') . Cependant, avant / après semble à peine fonctionner pour moi, et je me retrouve souvent à utiliser la méthode getChildHtml comme sauvegarde, ce qui n’est pas toujours idéal, et implique de modifier plus de fichiers .phtml que nécessaire.

J’ai essayé:

    

Rien n’apparaît …

    

Toujours rien …. Je suis également conscient d’utiliser before="-" ou after="-" pour placer quelque chose avant tout dans son bloc parent. J’ai parfois de la chance avec ça, mais en général, je suis confus et frustré.

J’ai googlé partout pour «magento xml avant / après ne pas fonctionner» et commence à me demander si c’est juste moi que ça arrive à … quelqu’un peut-il expliquer quand je peux et ne peux pas utiliser avant / après pour positionner des blocs? Quel est le problème avec les exemples ci-dessus?

Je suis dans Magento 1.7.0.2 (dernière disponible au moment de la publication)

La principale motivation pour cela est de réduire le nombre de fichiers .phtml de base que je dois éditer pour append un getChildHtml() , alors s’il y a un autre moyen (XML) de contourner ce getChildHtml() , je serais intéressé de le savoir …

Les atsortingbuts before et after ne fonctionnent que dans l’un des deux cas suivants:

  1. Lorsque vous insérez dans un bloc core/text_list
  2. Lorsque votre bloc modèle appelle getChildHtml sans aucun paramètre

Quand tu dis

    

tu dis à Magento

Hey Magento, placez le example_block dans le bloc root .

Lorsque vous placez un certain nombre de blocs différents dans un parent, ces blocs ont un ordre implicite. Pour les blocs de gabarit, cet ordre importe peu, car ces blocs sont explicitement rendus.

 getChildHtml('example_block') ?> 

Cependant, il y a deux cas où l’ordre est important. Tout d’abord, si vous appelez

 getChildHtml() ?> 

à partir d’un modèle, Magento affichera tous les blocs enfants dans l’ordre.

Deuxièmement, il existe un type spécial de bloc appelé “liste de texte” ( core/text_list / Mage_Core_Block_Text_List ). Ces blocs rendent tous leurs enfants automatiquement, à nouveau dans l’ordre. Le bloc de content est un exemple

  

C’est pourquoi vous pouvez insérer des blocs dans le content et ils s’affichent automatiquement.

Donc, dans votre exemple ci-dessus, vous insérez des blocs dans le bloc root . Le bloc root est un bloc de modèle dont le modèle getChildHtml utilise les appels getChildHtml avec des parameters explicites. Par conséquent, les atsortingbuts before et after ne font pas ce que vous (et beaucoup d’autres, y compris moi) souhaiteriez qu’ils fassent.