CMS页面中的静态块的自定义模板?


8

我在网上搜索,但找不到该怎么做。

我想将之前在admin中创建的静态块添加到cms页。使用以下任一行均可使用:

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

现在,我想使用自定义模板,即:

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

当我将其放入cms-page时,将显示该块,但将完全忽略“ template”标签cms/content.phtml


我尝试了什么,我试图扩展类Mage_Block_Cms_Block并添加setTemplate($this->getTemplate());到-function _toHtml()。效果与上面相同- cms/content.phtml被使用。

我试图扩展类Mage_Core_Block_Template; 我当然可以在这里设置模板,但是在获取静态块时遇到了问题。我找不到如何通过block-id获取该块的信息。

这个问题是关于/不是关于
我知道如何使用PHP。
我知道如何使用XML文件执行此操作。
对于这个问题至关重要的是,可以在后端管理数据块。

我运行Magento CE 1.7.0.0。

感谢您的时间!

Answers:


8

您无法更改静态块的模板,因为静态块没有模板。看一下方法:Mage_Cms_Block_Block::_toHtml()。该_toHtml()方法用于呈现任何块对象,在cms块的情况下,它仅呈现块的内容。

如果要将任何cms块的内容包装在某些标记中,可以尝试以下操作:

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

并在文件中custom/block.phtml执行以下操作:

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

我希望这就是您所需要的。


1
好的解决方案,从来没有想过这种方式。仍然,创建小部件会更合适吗?无论如何+1
Sander Mangel

我猜它可以与小部件一起使用,但这意味着通过小部件呈现的所有cms块在其周围都具有相同的标记。这样,您可以为不同的静态块使用不同的模板。如果您希望所有内容都呈现相同的效果,那么我猜想小部件方法就足够了。
马里乌斯

3

你尝试过cms/widget_block吗?该块从扩展Mage_Core_Model_Template,因此有可能做您想做的事情。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.