Adición de un área personalizada para los bloques en un diseño personalizado
Pregunta
Ok, así que he hecho un módulo y lo utilizan para gestionar todos los diseños personalizados en mi tienda. Ahora tengo que acaba de añadir algunos bloques a ciertas páginas que utilizan la plantilla. He añadido la siguiente línea a mi diseño personalizado:
<?php echo $this->getChildHtml('cms_left') ?>
Y dentro de la actualización de diseño XML he añadido lo siguiente:
<reference name="cms_left">
<block type="cms/block" name="cms_left_test" before="-">
<action method="setBlockId"><block_id>cms_left_test</block_id></action>
</block>
</reference>
Y encerrar su relevante aquí es parte de la parte pertinente de mis moudles Config.xml que se encarga de esta disposición personalizada:
<cms_pages module="page" translate="label">
<label>cms pages</label>
<template>page/cms_pages.phtml</template>
<layout_handle>cms pages</layout_handle>
</cms_pages>
Por lo que sé que esto debería mostrar ahora el bloque cms_left_test en esta página, sin embargo, no está funcionando. ¿Me he perdido un paso en alguna parte? He intentado buscar algunos ejemplos, sino porque estoy dibujando partes y piezas de todo no estoy seguro de si mi enfoque es totalmente correcto.
Solución
How is the block 'cms_left' defined in your layout? Or better yet ''IS IT defined?'. You are calling this:
<reference name="cms_left">
<block type="cms/block" name="cms_left_test" before="-">
<action method="setBlockId"><block_id>cms_left_test</block_id></action>
</block>
</reference>
But in order to be able to reference a block, the block should exist.
I think you are missing this piece of xml in your custom layout file.
<default>
<reference name="root">
<block type="core/text_list" name="cms_left" as="cms_left" translate="label">
<label>CMS left block</label>
</block>
</reference>
</default>
Otros consejos
From what it looks like, the block cms_left
is not defined anywhere. In order for it to work, you should define it as core/text_list
somewhere in your layout definitions. Then you can reference it and add new blocks to it, like you are trying to do. Assuming cms_left
is a direct child of root
, you can do the following:
<reference name="root">
<block name="cms_left" type="core/text_list" />
</reference>
Make sure you add this before your code above.