Pregunta

Tengo una página estática en la que yo llamo un bloque dinámico:

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

En el archivo de diseño de mi módulo personalizado que estoy añadiendo dos hijos de mi bloque 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>

Todo lo que quiero es ser capaz de llamar a estos dos bloques con esto:

$this->getChildHtml('search_by_size')

o esto:

$this->getChildHtml('search_by_vehicle')

en cualquier lugar en la plantilla del bloque principal dinámico.

El problema es que sólo se muestran si la referencia no es "CustomModule" sino a "contenido", pero de esta manera se están mostrando en el inicio del bloque "contenido", no se donde quiero ....

¿Fue útil?

Solución

Bloques instancia por la Directiva {{block}} en que no se puede hacer referencia a los archivos de diseño XML.

Esto se debe a que se crean instancias durante el procesamiento de la etapa de renderLayout(), que llama a cada método de bloques toHtml().

El XML diseño se procesa antes de que, durante la ejecución de la etapa de loadLayout().

Para solucionar este problema, declare los bloques del niño sin un bloque padre en el diseño 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>

A continuación, en el bloque de custommodule/search uso getBlockHtml() plantilla en lugar de getChildHtml().

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

Otros consejos

En el archivo de plantilla de su encargo el uso de bloques custommodule/search.phtml lo siguiente para mostrar los bloques del niño y evitar el cambio de diseño:

<?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();
?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top