web-dev-qa-db-fra.com

Comprendre getChildHtml dans Magento

A partir de la ligne suivante dans 2columns-right.phtml

<div class="col-main">
    <?php echo $this->getChildHtml('global_messages') ?>
    <?php echo $this->getChildHtml('content') ?>
</div>

Je ne suis pas capable de comprendre cela, d'où vient le contenu de <?php echo $this->getChildHtml('content') ?>.

le fichier .chtml est appelé pour afficher les données par <?php echo $this->getChildHtml('content') ?>

59
Anup_Tripathi

Si nous discutons de l'interface du site Web, la ligne que vous avez posée à propos de ...

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

est ajouté au code XML de présentation Magento dans app/design/frontend/base/default/layout/page.xml. Dans la version 1.8 de Magento, vous le trouverez défini aux lignes 92 à 94.

<block type="core/text_list" name="content" as="content" translate="label">
    <label>Main Content Area</label>
</block>

En regardant l'attribut "type" de cette balise de bloc, nous pouvons savoir de quelle classe d'objet appartient cette section de la présentation. Il provient du module "Core" et est du type bloc Text List. Le nom de la classe pour ce Mage_Core_Block_Text_List. (app/code/core/Mage/Core/Block/Text/List.php). Les listes de textes sont simplement des conteneurs de blocs dont le but est de stocker des blocs enfants supplémentaires à l'intérieur. Vous pouvez ajouter un nombre illimité de blocs enfants à la liste de textes. Ils seront restitués dans l'ordre de leur ajout ou de leur affectation.

Donc, pour répondre à votre question, il n’existe aucun script de vue (fichier .phtml) qui rend le contenu de $ this-> getChildHtml ('content'). Les blocs qui ont été ajouté à de ce bloc, peuvent eux-mêmes être associés à des scripts de vue. Pour savoir quels sont les scripts de vue, il vous faudrait trouver le XML de mise en page qui a ajouté le bloc.

Par exemple, si le fichier de mise en page suivant était ajouté à l'interface du thème de mon site Web:

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="content">
            <block type="core/template" name="my_view_script" template="hello/world.phtml" />
        </reference>
    </default>
</layout>

Le code ci-dessus ajoute le bloc avec une classe d'objet de Mage_Core_Block_Template au bloc avec le nom 'content' (qui se trouve être celui que vous avez demandé). Magento recherchera ensuite le script de vue aux emplacements suivants, dans cet ordre:

app/design/frontend/PACKAGE_NAME/THEME_NAME/template/hello/world.phtml
app/design/frontend/PACKAGE_NAME/default/template/hello/world.phtml
app/design/frontend/base/default/template/hello/world.phtml

Le premier qui est trouvé est celui qu'il utilisera. Si aucun script de vue n’est trouvé, Magento enregistrera une erreur dans var/logs/system.log (paramètre de fichier journal par défaut) indiquant que le script d'affichage n'a pas été trouvé. Aucune sortie du bloc ne se produira.

Notez qu'en fonction de vos paramètres dans Système -> Configuration -> Conception (générale), il peut y avoir un nombre supplémentaire de package/theme _ emplacements dans lesquels Magento recherchera. Il existe également d'autres scénarios tels que, si le champ "Thème personnalisé" est modifié pour des pages CMS, des catégories de catalogue ou des produits de catalogue individuels, la page d'affichage de ces modèles individuels peut comporter un emplacement de script qui correspond au thème sélectionné) qui a la priorité sur les paramètres par défaut de votre site.

Magento suivra cette même logique de repli lors de la recherche de fichiers de traduction ainsi que de fichiers XML de mise en page.

Veuillez noter qu'il est parfaitement acceptable de copier des scripts de vue individuels (éviter de copier des répertoires entiers, ne copier que les scripts de vue que vous avez réellement l'intention de modifier) ​​de app/design/frontend/base/default/template/ à votre thème local et personnalisez-le en fonction du thème de votre site Web. Cependant, pour avoir un site compatible avec la mise à niveau, les fichiers de mise en page ne doivent pas être copiés de la base vers votre thème local. Cela ne suit pas les pratiques de mise à niveau compatibles. Au lieu de cela, les mises à jour de la disposition XML de votre thème doivent être contenues dans app/design/frontend/PACKAGE_NAME/THEME_NAME/layout/local.xml. Il n'y a pas d'instructions de mise en page de app/design/frontend/base/default/layout/*, qui ne peut pas être supprimé/ajouté/modifié, ce que vous avez, avec les instructions XML appropriées dans local.xml.

150
Darren Felton