Magento XML à l'aide de avant/après pour placer des blocs à peine les travaux
Je suis un front-end Magento dev, ont construit tout à fait un peu de mes propres thèmes et je veux comprendre Magento XML bloc de positionnement mieux...
J'utilise normalement un local.xml
fichier à manipuler tout, je peux définir un bloc comme suit:
<cms_index_index>
<reference name="root">
<block type="core/template" name="example_block" as="exampleBlock" template="page/html/example-block.phtml"/>
</reference>
</cms_index_index>
Cela permettrait de créer un bloc sur la page d'accueil (cms_index_index
) et, depuis le bloc est créé un niveau sous root
, normalement j'appel le bloc en ajoutant:
<?php echo $this->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
pour la page appropriée de la balise.
Je vois des trucs comme le suivant tout au long de la base des fichiers XML, et dans tutoriels:
<reference name="root">
<block type="core/template" name="example_block" before="content" template="page/html/example-block.phtml"/>
</reference>
content
est un bloc qui est une partie de magento général de la structure de la page et, d'après ce que je comprends, before="content"
devrait le placer où vous vous attendez, sans avoir à utiliser getChildHtml('exampleBlock')
, so far so good... cependant, avant/après à peine jamais semble fonctionner pour moi, et il m'arrive fréquemment de recourir à la getChildHtml méthode de sauvegarde, ce qui n'est pas toujours idéale, et des moyens de montage plus .phtml fichiers que nécessaire.
J'ai essayé:
<reference name="root">
<block type="core/template" name="example_block" before="content" template="page/html/example-block.phtml"/>
</reference>
Rien ne s'affiche...
<reference name="root">
<block type="core/template" name="example_block" after="header" template="page/html/example-block.phtml"/>
</reference>
Toujours rien.... Je suis également conscient de l'utilisation de before="-"
ou after="-"
à la place quelque chose avant tout à l'intérieur de son bloc parent. J'ai parfois un peu de chance, mais en général seulement de la confusion et de la frustration.
J'ai googlé toute la place pour les "magento xml avant/après qui ne travaillent pas" et commence à se demander si c'est juste moi, ce qui se passe à... quelqu'un peut-il expliquer quand je peux et ne peux pas l'utiliser avant/après de la position des blocs? Quel est le problème avec les exemples ci-dessus?
Je suis dans magento 1.7.0.2 (les dernières données disponibles au moment de la publication)
La motivation principale pour cela est de réduire le nombre de core .phtml fichiers j'ai besoin de modifier pour ajouter un getChildHtml()
, donc si il y a une autre (XML) moyen de contourner cela, je serais curieux de savoir...
- tous les caches sont éteints :/
Vous devez vous connecter pour publier un commentaire.
La
before
etafter
attributs ne fonctionnent que dans un de deux cas:core/text_list
blocgetChildHtml
sans paramètresQuand vous dites
vous dites Magento
Quand vous mettez un certain nombre de différents blocs à l'intérieur d'un parent, ces blocs ont un ordre implicite. Pour les blocs d'un modèle, cet ordre n'a pas d'importance, puisque ces blocs sont explicitement rendu.
Cependant, il y a deux cas où l'ordre des questions. Tout d'abord, si vous appelez
à partir d'un modèle, puis Magento rendra tous l'enfant blocs, dans l'ordre.
Deuxièmement, il existe un type spécial de bloc appelé une "liste de texte" (
core/text_list
/Mage_Core_Block_Text_List
). Ces blocs de rendre tous leurs enfants, automatiquement, à nouveau dans l'ordre. Lecontent
bloc est un exemple de ceC'est pourquoi vous pouvez insérer des blocs dans
content
et qu'ils rendent automatiquement.Ainsi, dans l'exemple ci-dessus, vous êtes l'insertion de blocs dans le
root
bloc. Leroot
bloc est un modèle de bloc dont phtml modèle utilisegetChildHtml
appels explicites paramètres. Par conséquent, labefore
etafter
attributs de ne pas faire ce que vous (et beaucoup d'autres, dont moi) ils ne veulent.