web-dev-qa-db-fra.com

Où se trouve le contenu de <? Php echo $ this-> getChildHtml (’right’)?>

J'essaie de réorganiser ma barre latérale droite. Dans le modèle (2columns-right), il appelle: 

<?php echo $this->getChildHtml('right') ?>

Où puis-je trouver le contenu de cette variable? 

9
Urvisha

Un appel à la méthode getChildHtml() charge le code HTML du bloc enfant avec le nom qui lui est transmis. Dans ce cas, nous recherchons un bloc enfant nommé right .

Pour déterminer où trouver ce bloc enfant, nous devons savoir quel bloc appelle cette méthode. Je sais que cet appel à la méthode getChildHtml() apparaît dans le modèle de colonne de la page principale sous la forme right est l'une des colonnes. Alors jetez un coup d'oeil dans le fichier de mise en page page.xml et recherchez le fichier de modèle dans lequel vous avez trouvé l'appel de méthode, vous trouverez quelque chose comme:

<reference name="root">
    <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
    <!-- Mark root page block that template is applied -->
    <action method="setIsHandle"><applied>1</applied></action>
</reference>

L'utilisation de la balise <reference> dans un fichier de mise en page vous permet de modifier le bloc ciblé, tandis que la balise <action> vous permet d'exécuter une méthode de bloc à l'intérieur du bloc avec lequel vous travaillez. Cette section de mise en page définit donc le modèle dans le bloc root . De là, nous savons que c’est le bloc root qui appelle la méthode getChildHtml().

Regardons ensuite où le bloc root est défini dans la présentation, il se trouve dans le même fichier de présentation page.xml et devrait être situé tout en haut:

<block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
    ...
    <block type="core/text_list" name="right" as="right" translate="label">
        <label>Right Column</label>
    </block>
    ...
</block>

Il y a beaucoup de choses définies dans ce bloc, mais vous pouvez voir qu’il porte le nom root et définit pas mal de blocs enfants. L'un de ces blocs enfants s'appelle right et c'est ce bloc dont le code HTML est sorti par la méthode getChildHtml(). Il est important de noter le type de bloc - core/text_list. Il s'agit d'un type de bloc spécial, ce qui signifie que lors du rendu du code HTML pour ce bloc à l'aide de la méthode getChildHtml(), les blocs enfants seront également restitués. Si le type de bloc était page/html comme avec le bloc racine, chaque bloc enfant ajouté au bloc right aurait besoin de son propre appel à la méthode getChildHtml(); en utilisant ce type de bloc, vous n'avez besoin que d'un appel à getChildHtml('right') et de tous les blocs enfants. sera également rendu.

Comme vous pouvez le constater, le bloc right est défini ici, mais il est vide. En effet, de la même manière que vous avez la balise référençant le bloc racine (<reference name="root">), les autres fichiers de mise en page ajoutent des blocs enfants au bloc right en référençant le bloc right .

<reference name="right">
    ...
</reference>

Donc, pour répondre enfin à votre question (et en informer éventuellement un peu plus tard), vous devez rechercher dans les fichiers de mise en page autres que page.xml des références au bloc right , vous y trouverez tout le contenu enfant. sortie par l'appel à la méthode getChildHtml().

Vous pouvez modifier ce qui est ajouté au bloc right dans votre propre fichier de présentation de module ou le fichier de présentation local.xml si vous ne créez pas de module. Je couvre brièvement le fichier de mise en forme local.xml dans ma réponse ici avec un exemple de syntaxe pour ajouter de nouveaux blocs et supprimer des blocs ajoutés dans d'autres fichiers de mise en forme.

22
Jonathan Hussey

Vous trouverez dans votre fichier layout.xml d'où tout provient. Il aurait des blocs de liste sous lesquels les fichiers .phtml et les données d'appel proviennent de là. J'espère que vous comprenez ce que j'essaie de transmettre.

1
Chiragit007
<reference name="right">  
    <block type="yourmodule/yourblock" name="yourblock" as="yourblock" />
 </reference>

Vous pouvez ajouter vos blocs personnalisés comme ceci.

0
Chiragit007