Modello personalizzato per blocchi statici nella pagina CMS?


8

Ho cercato sul web e non sono riuscito a trovare come farlo.

Voglio aggiungere un blocco statico che ho creato in admin prima di una pagina cms. Funziona utilizzando una 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 usare un modello personalizzato, ovvero:

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

Quando lo inserisco nella pagina cms in questo modo, viene mostrato il blocco, ma cms/content.phtmlviene usato il tag "template" completamente ignorato .

COSA HO PROVATO
Ho cercato di estendere la classe Mage_Block_Cms_Block e aggiungerla setTemplate($this->getTemplate());a _toHtml()-function. L'effetto è lo stesso di cui sopra: cms/content.phtmlviene utilizzato.

Ho cercato di estendere la classe Mage_Core_Block_Template; ovviamente posso impostare un modello qui, ma ho problemi a ottenere il blocco statico. Non riesco a trovare come ottenere il blocco con ID blocco.

CHE COSA È QUESTA DOMANDA / CHE NON RISPONDE
So come farlo con PHP.
So come farlo con i file XML.
È fondamentale per questa domanda che i blocchi possano essere gestiti nel backend.

Corro Magento CE 1.7.0.0.

Grazie per il tuo tempo!

Risposte:


8

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 _toHtml()metodo viene utilizzato per eseguire il rendering di qualsiasi oggetto blocco e, nel caso dei blocchi cms, esegue solo il rendering del contenuto del blocco.

Se vuoi racchiudere il contenuto di qualsiasi blocco cms in qualche markup puoi provare questo:

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

E nel file custom/block.phtmlfai 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 sia ciò di cui avevi bisogno.


1
Bella soluzione, mai pensato in questo modo. Tuttavia, la creazione di un widget non sarebbe più appropriata? Comunque +1
Sander Mangel

Immagino che potrebbe funzionare con un widget, ma questo significa che tutti i blocchi cms resi tramite widget avrebbero lo stesso markup attorno ad esso. In questo modo è possibile avere diversi modelli per diversi blocchi statici. Se vuoi che tutto sia reso uguale, suppongo che l'approccio del widget dovrebbe essere sufficiente.
Marius

3

Ci hai provato cms/widget_block? Questo blocco si estende da Mage_Core_Model_Template, quindi potrebbe essere possibile fare ciò che stai cercando di fare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.