Domanda

ho cercato nel web e non poteva trovare come fare questo.

Voglio aggiungere un blocco statico che ho creato in admin davanti ad un CMS-pagina. Questo funziona utilizzando sia di queste righe:

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

Ora voglio utilizzare un modello personalizzato, cioè:.

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

Quando ho messo in CMS-pagina come questa, il blocco viene mostrato, ma il "modello" -tag è completamente ignorato -. cms/content.phtml viene utilizzato

Quello che ho cercato
Ho cercato di estendere la classe Mage_Block_Cms_Block e add setTemplate($this->getTemplate()); a _toHtml() funzione. L'effetto è lo stesso come sopra - cms/content.phtml viene utilizzato.

Ho cercato di estendere la classe Mage_Core_Block_Template; Naturalmente posso impostare un modello qui, ma ho difficoltà a trovare il blocco statico. Non riesco a trovare il modo di ottenere il blocco per blocco-id.

COSA QUESTO domanda è su / NON DI
Io so come farlo con PHP.
So come fare questo con i file XML.
E 's importante a questa domanda che i blocchi possono essere gestiti nel backend.

Corro Magento CE 1.7.0.0.

Grazie per il tuo tempo!

È stato utile?

Soluzione

Non è possibile modificare il modello per un blocco statico, perché il blocco statico non ha un modello. Date un'occhiata al metodo: Mage_Cms_Block_Block::_toHtml(). Il metodo _toHtml() viene utilizzato per rendere qualsiasi oggetto blocco, e nel caso dei blocchi CMS rende solo il contenuto del blocco.

Se si vuole avvolgere il contenuto di qualsiasi blocco cm in qualche markup si può provare questo:

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

E nel file custom/block.phtml fare questo:

<?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;?>

Spero che questo è quello che avevi bisogno.

Altri suggerimenti

Hai provato con cms/widget_block? Questo blocco si estende da Mage_Core_Model_Template, quindi potrebbe essere possibile fare ciò che si sta cercando di fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top