Domanda

Ho una pagina statica in cui io chiamo un blocco dinamico:

{{block type="custommodule/search" name="custommodule_search" template="custommodule/search.phtml" }}

Nel file di layout del mio modulo personalizzato che sto aggiungendo due figli del mio blocco 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>

Tutto quello che voglio è quello di essere in grado di chiamare questi due blocchi con questo:

$this->getChildHtml('search_by_size')

o questo:

$this->getChildHtml('search_by_vehicle')

in qualsiasi parte del modello del blocco dinamico principale.

Il problema è che essi vengono visualizzati solo se il riferimento non è quello di "custommodule", ma di "contenuto", ma in questo modo stanno mostrando agli inizi del blocco "contenuto", non dove voglio ....

È stato utile?

Soluzione

Blocchi istanziato dalla direttiva {{block}} in non può essere referenziato da file di layout XML.

Questo è perché sono istanziati durante l'elaborazione della fase renderLayout(), che chiama ogni metodo blocchi toHtml().

L'XML layout viene elaborato prima che, durante l'esecuzione del passo loadLayout().

Per ovviare a questo, dichiarare i blocchi bambino senza un blocco padre nel layout 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>

Poi, nel blocco custommodule/search Usa modello getBlockHtml() invece di getChildHtml().

<?php echo $this->getBlockHtml('search_by_size') ?>
<?php echo $this->getBlockHtml('search_by_vehicle') ?>

Altri suggerimenti

Nel file di modello per l'utilizzo da blocco custommodule/search.phtml personalizzato seguente per mostrare i blocchi di bambini e di evitare il cambio di layout:

<?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();
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top