如何检查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() !== '') {}
工作就像一个魅力..不错! – 2014-05-16 14:00:35