Question

Je recherche sur le web et n'a pas pu trouver comment faire.

Je veux ajouter un bloc statique que je l'ai créé en administration avant d'un CMS page. Cela fonctionne à l'aide de l'une des ces lignes:

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

Maintenant, je veux utiliser un modèle personnalisé, i.e..

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

Quand je l'ai mis dans le CMS pages comme celui-ci, le bloc est affiché, mais le « modèle » est complètement ignoré -tag -. cms/content.phtml est utilisé

QU'EST-CE I Tried J'ai essayé d'étendre la classe Mage_Block_Cms_Block et ajouter setTemplate($this->getTemplate()); à _toHtml() fonction. L'effet est le même que ci-dessus - cms/content.phtml est utilisé.

J'ai essayé d'étendre la classe Mage_Core_Block_Template; bien sûr, je peux définir un modèle ici, mais j'ai des problèmes pour obtenir le bloc statique. Je ne peux pas trouver comment obtenir le bloc par bloc-id.

QU'EST-CE QUE CETTE QUESTION A PROPOS / NON A PROPOS Je sais comment faire avec PHP.
Je sais comment faire avec des fichiers XML.
Il est essentiel à cette question que les blocs peuvent être gérés dans le back-end.

Je lance Magento CE 1.7.0.0.

Merci pour votre temps!

Était-ce utile?

La solution

Vous ne pouvez pas modifier le modèle pour un bloc statique, car le bloc statique ne dispose pas d'un modèle. Jetez un oeil à la méthode: Mage_Cms_Block_Block::_toHtml(). La méthode de _toHtml() est utilisé pour rendre un objet de bloc, et dans le cas des blocs cms elle rend seulement le contenu du bloc.

Si vous voulez envelopper le contenu de tout cms bloc dans quelques balises, vous pouvez essayer ceci:

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

Et dans le fichier custom/block.phtml faire ceci:

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

J'espère que c'est ce que vous avez besoin.

Autres conseils

Avez-vous essayé avec cms/widget_block? Ce bloc va de Mage_Core_Model_Template, de sorte qu'il pourrait être possible de faire ce que vous essayez de faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top