Как проверить, активен ли блок CMS? - PullRequest
9 голосов
/ 17 февраля 2010

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

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

Мага :: Журнал (get_class (Mage :: приложение () -> getLayout () -> createBlock ( 'КМВ / блок') -> setBlockId ( 'promo_space')

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

Ответы [ 5 ]

18 голосов
/ 02 мая 2012

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

Замените static_block_identifier на идентификатор , назначенный статическому блоку CMS.

5 голосов
/ 17 февраля 2010

Получил это сам

Я создал метод isActive (Identifiere, Value) во вспомогательном блоке в локальном модуле 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;
    }

}

параметр $ attribute - это поле таблицы (блока cms), такое как «идентификатор» или «заголовок», а значение может быть именем статического блока или самого идентификатора. Оба использовали для фильтрации конкретного интересующего вас статического блока

Вот как я называю помощника

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

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

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

4 голосов
/ 14 мая 2014

У меня работает этот код:

if ( $this->getLayout()->createBlock('cms/block')->setBlockId('YOUR-BLOCK-ID')->toHtml() !== '' ) {}
1 голос
/ 05 марта 2012

Лучший способ сделать это - добавить наблюдателя к этому событию: 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  
}
1 голос
/ 28 ноября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...