Référence à un bloc en page statique
-
16-10-2019 - |
Question
J'ai une page statique que j'appelle un bloc dynamique:
{{block type="custommodule/search" name="custommodule_search" template="custommodule/search.phtml" }}
Dans le fichier de mise en page de mon module personnalisé J'ajoute deux enfants de mon bloc custommodule_search:
<layout>
<default module="custommodule">
<reference name="custommodule_search">
<block type="custommodule/search_bysize" name="search_by_size" template="custommodule/search/by-size.phtml" />
<block type="custommodule/search_byvehicle" name="search_by_vehicle" template="custommodule/search/by-vehicle.phtml" />
</reference>
</default>
Tout ce que je veux, c'est de pouvoir appeler ces deux blocs avec ceci:
$this->getChildHtml('search_by_size')
ou ceci:
$this->getChildHtml('search_by_vehicle')
ne importe où dans le modèle du principal bloc dynamique.
Le problème est qu'ils ne sont affichés que si la référence est de ne pas « custommodule » mais à « contenu », mais cette façon dont ils font preuve au début du bloc « contenu », où je veux ....
La solution
Les blocs instancié par la directive dans {{block}}
ne peut pas être référencé à partir de fichiers XML de mise en page.
C'est parce qu'ils sont instanciés lors du traitement de l'étape de renderLayout()
, qui appelle chaque méthode de toHtml()
blocs.
Le fichier XML de mise en page est traitée avant que, lors de l'exécution de l'étape de loadLayout()
.
Pour éviter cela, déclarer les blocs enfants sans bloc parent dans la mise en page XML
<layout>
<default>
<block type="custommodule/search_bysize" name="search_by_size" template="custommodule/search/by-size.phtml" />
<block type="custommodule/search_byvehicle" name="search_by_vehicle" template="custommodule/search/by-vehicle.phtml" />
</default>
</layout>
Ensuite, dans votre modèle bloc custommodule/search
utilisation getBlockHtml()
au lieu de getChildHtml()
.
<?php echo $this->getBlockHtml('search_by_size') ?>
<?php echo $this->getBlockHtml('search_by_vehicle') ?>
Autres conseils
Dans le fichier de modèle de votre utilisation de custommodule/search.phtml
de bloc personnalisé ce qui suit pour afficher les blocs d'enfants et d'éviter le changement de mise en page:
<?php
echo Mage::app()->getLayout()->createBlock('custommodule/search_bysize')->setTemplate('custommodule/search/by-size.phtml')->toHtml();
echo Mage::app()->getLayout()->createBlock('custommodule/search_byvehicle')->setTemplate('custommodule/search/by-vehicle.phtml')->toHtml();
?>