我想知道如何检查特定CMS块是否处于活动状态。
到目前为止,我发现CMS块是Mage_Cms_Block_Block
类,它继承自Mage_Cms_Block_Abstract
类
法师::日志(get_class(法师::应用程序() - > getLayout() - > createBlock( 'CMS /块') - > setBlockId( 'promo_space')
这两个类都没有方法可以检查块是否处于活动状态。我该怎么做?
答案 0 :(得分:18)
Mage::getModel('cms/block')->load('static_block_identifier')->getIsActive()
将static_block_identifier替换为您分配给CMS静态块的标识符。
答案 1 :(得分:5)
自己做到了
我在Mage / Cms本地模块的助手“Block”中创建了一个方法isActive(Identifiere,Value)。
这是该方法的外观
public function isActive($attribute, $value){
$col = Mage::getModel('cms/block')->getCollection();
$col->addFieldToFilter($attribute, $value);
$item = $col->getFirstItem();
$id = $item->getData('is_active');
if($id == 1){
return true;
}else{
return false;
}
}
参数$ attribute是table(cms-block)字段,例如'identifier'或'title',value可以是静态块或标识符本身的名称。两者都用于过滤掉您感兴趣的特定静态块
以下是我如何称呼帮助
if(Mage::helper('cms/block')->isActive('identifier','promo_space')){
//do that
}
我还更新了Cms块的config.xml文件,以读取我的新助手和方法。
我希望它有用。
答案 2 :(得分:4)
此代码适用于我:
if ( $this->getLayout()->createBlock('cms/block')->setBlockId('YOUR-BLOCK-ID')->toHtml() !== '' ) {}
答案 3 :(得分:1)
也许这是旧的,但我使用的另一种方法不仅适用于cms块,还适用于布局中加载的任何其他块。如果您需要检查是否已加载块:
if($this->getLayout()->getBlock('your_block_name'))
//Do whatever you need here
这很简单!
答案 4 :(得分:1)
更好的方法是在此事件中添加观察者:controller_action_layout_generate_blocks_after,它在Magento初始化并生成Block对象后立即发生。在呈现HTML之前,您可以访问布局和操作类以及所有生成的块
//You can check if the block exists in the layout
$layout = $observer->getEvent()->getObserver();
$cmsBlock = $layout->getBlock($identifier);//Returns false if doesn't exist.
//You can check it in the database too:
$cmsModel = Mage::getModel('cms/page')->load($identifier);
if($cmsModel->getId() AND $cmsModel->getIsActive() == 1)
{
//CMS block is active
}