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 ....

Était-ce utile?

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();
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top