好的,我已经在我的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以便我可以按块名称获取块?
任何帮助都非常感激。
答案 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