如何检查CMS块是否有效?

时间:2010-02-17 16:34:36

标签: magento

我想知道如何检查特定CMS块是否处于活动状态。

到目前为止,我发现CMS块是Mage_Cms_Block_Block类,它继承自Mage_Cms_Block_Abstract

  

法师::日志(get_class(法师::应用程序() - > getLayout() - > createBlock( 'CMS /块') - > setBlockId( 'promo_space')

这两个类都没有方法可以检查块是否处于活动状态。我该怎么做?

5 个答案:

答案 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  
}