modello personalizzato per blocchi statici a pagina CMS?
-
16-10-2019 - |
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!
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.