2010-02-17 4 views
7

Интересно, как проверить, что конкретный блок CMS активен или нет.Как проверить блок CMS активен?

До сих пор я обнаружил, что CMS блок является Mage_Cms_Block_Block классом, который наследует от класса Mage_Cms_Block_Abstract

Mage :: Log (get_class (Mage :: приложение() -> getLayout() -> createBlock ('СХ/блок «) -> setBlockId (». promo_space ')

ни один из этих двух классов есть методы, которые бы проверить погоду блок активен или нет Как мне это сделать

ответ

5

Получил это себе

?

Я создал метод isActive (Identifiere, Value) в вспомогательном блоке «Block» в локальном модуле Mage/Cms.

Это, как метод выглядит

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 
} 

Я также обновил файл config.xml для Cms блока, чтобы прочитать мой новый помощник и метод.

Я надеюсь, что это полезно.

1

Возможно, это старый, но я использую другой метод, который работает не только для блоков cms, но и для любого другого блока, загруженного в макет. Если вам необходимо проверить, был ли загружен блок:

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

Это довольно просто!

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 
} 
17

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

Заменить static_block_identifier с идентификатором вы назначенными для статического блока CMS.

3

Этот код работает для меня:

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

работал как шарм .. хорошо! –

Смежные вопросы