Hacer referencia a un bloque en la página estática
-
16-10-2019 - |
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 ....
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();
?>