如何检查CMS块是否处于活动状态?

问题描述:

我想知道如何检查一个特定的CMS块是否有效。如何检查CMS块是否处于活动状态?

到目前为止,我还发现,CMS块是Mage_Cms_Block_Block类从Mage_Cms_Block_Abstract

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

无论是两类有会请检查是否块处于活动状态的方法怎么做呢

得到这个自己

我在Mage/Cms本地模块的助手“块”中创建了一个方法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; 
    } 

} 

参数$属性表(CMS-块)字段,如“识别符”或“标题”和值可以是静态的块或标识符本身的名称。无论用于过滤下来的特殊静态块您有兴趣

这里是我叫助手

if(Mage::helper('cms/block')->isActive('identifier','promo_space')){ 
//do that 
} 

我也更新为CMS块config.xml文件读取我的新帮手和方法。

我希望它有用。

也许这是旧的,但我使用另一种方法,不仅适用于cms块,而且适用于布局上加载的任何其他块。如果你需要检查一个块是否已经加载:

if($this->getLayout()->getBlock('your_block_name')) 
    //Do whatever you need here 

这很容易!

更好的方法是将事件添加到观察者: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 
} 

Mage::getModel('cms/block')->load('static_block_identifier')->getIsActive()

之前与标识符你分配给您的CMS静态块替换static_block_identifier。

此代码的工作对我来说:

if ($this->getLayout()->createBlock('cms/block')->setBlockId('YOUR-BLOCK-ID')->toHtml() !== '') {} 
+0

工作就像一个魅力..不错! – 2014-05-16 14:00:35