Pregunta

He buscado en la web y no pudo encontrar la manera de hacer esto.

Quiero añadir un bloque estático que he creado en el administrador antes de un CMS-página. Estos trabajos utilizando cualquiera de estas líneas:

{{block type="cms/block" block_id="my_block_id"}}
{{block type="cms/block" block_id="my_block_id" template="cms/content.phtml"}}

Ahora quiero utilizar una nueva plantilla, es decir:.

{{block type="cms/block" block_id="my_block_id" template="modulename/custom-template.phtml"}}

Cuando lo puse en el CMS-página como esta, se muestra el bloque, pero la "plantilla" -tag está completamente ignorado -. Se utiliza cms/content.phtml

lo que he intentado
He intentado extender Mage_Block_Cms_Block clase y setTemplate($this->getTemplate()); añadir a _toHtml()-función. El efecto es el mismo que el anterior - se utiliza cms/content.phtml.

He intentado extender Mage_Core_Block_Template clase; Por supuesto que puedo establecer una plantilla aquí, pero tengo problemas para obtener el bloque estático. No puedo encontrar la manera de obtener el bloque por bloque-id.

¿Qué Esta pregunta es sobre / NO SOBRE
Yo sé cómo hacer esto con PHP.
Yo sé cómo hacer esto con archivos XML.
Lo s crucial para esta pregunta que los bloques se pueden gestionar en el backend.

corro Magento CE 1.7.0.0.

Gracias por su tiempo!

¿Fue útil?

Solución

No se puede cambiar la plantilla para un bloque estático porque el bloque estático no tiene una plantilla. Echar un vistazo al método: Mage_Cms_Block_Block::_toHtml(). El método _toHtml() se utiliza para hacer que cualquier objeto de bloque, y en el caso de los cms bloques que sólo hace que el contenido del bloque.

Si desea envolver el contenido de cualquier bloque cms de algunas marcas puede probar esto:

{{block type="core/template" template="custom/block.phtml" block_id="some_block_id"}}

Y en el archivo custom/block.phtml hacer esto:

<?php
$block = Mage::app()->getLayout()->createBlock('cms/block')->setBlockId($this->getBlockId()); //retrieve the cms block with the id set on this layout block
$html = $block->toHtml();//in this var you have the content of the cms block 
?>
<?php if ($html) : //this is needed to avoid additional markup if the cms block is empty?>
<div class="some-class">
    <div class="some-other-class">
        <?php echo $html;//actuall cms block?>
    </div>
</div>
<?php endif;?>

Espero que esto sea lo que sea necesario.

Otros consejos

¿Has probado con cms/widget_block? Este bloque se extiende desde Mage_Core_Model_Template, lo que podría ser posible hacer lo que usted está tratando de hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top