Magento createBlock方法不起作用,显示静态块数据

时间:2010-09-11 21:10:10

标签: magento

好的,我已经在我的CMS区域创建了静态块,我试图在我自己构建的自定义主页模板中输出它们。

我能找到的每个文件都说如下输出块

    <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('my-block-identifier')->toHtml() ?>

那对我没有用,所以我尝试了另一种方式。 -

       <?php $block = Mage::getSingleton('core/layout')->createBlock('cms/block')->setBlockId('my-block-identifier');
        echo $block->toHtml();

所有引用它的网站告诉我使用实际的块标识符来获取块。那么我决定在我的cms_block表中手动查找block_id,看看使用block_id号代替文字my-block-identifier名称是否有效 - 而且确实如此。所以我很困惑......任何人都可以告诉我如何通过实际标识符获取块,或者通过标识符查找块id以便我可以按块名称获取块?

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:1)

查看cms/block阻止源代码,这些教程误导了您,或者您误解了它们。

#File: app/code/core/Mage/Cms/Block/Block.php
class Mage_Cms_Block_Block extends Mage_Core_Block_Abstract
{
    protected function _toHtml()
    {
        if (!$this->_beforeToHtml()) {
            return '';
        }
        $html = '';
        if ($blockId = $this->getBlockId()) {
            $block = Mage::getModel('cms/block')
                ->setStoreId(Mage::app()->getStore()->getId())
                ->load($blockId);
            if (!$block->getIsActive()) {
                $html = '';
            } else {
                $content = $block->getContent();

                $processor = Mage::getModel('core/email_template_filter');
                $html = $processor->filter($content);
            }
        }
        return $html;
    }
}

块内容始终加载->load($blockId); - load,其中一个参数始终表示按数据库ID进行编码。

因此,如果没有支持的方法在块中内置此功能,则需要查找块ID。

$model = Mage::getModel('cms/block')->getCollection()
->addFieldToFilter('identifier','footer_links')
->getFirstItem();

var_dump($model->getBlockId()); 

答案 1 :(得分:0)

在管理员中,当您编辑静态块的内容时,您将从顶部看到名为Identifier的字段。复制该字段的值,并将其插入代码中。因此,如果您的阻止在管理员中被调用contact-info,那么您的代码将如下所示:

<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('contact-info')->toHtml() ?>

管理员中该标识符文本框中的值也将保存到cms_block表中,因为您已经解决了。

HTH, JD