2010-02-17 8 views
7

Zastanawiam się, jak sprawdzić, czy konkretny blok CMS jest aktywny, czy też nie.Jak sprawdzić blok CMS jest aktywny?

tej pory znalazłem, że blok CMS są Mage_Cms_Block_Block klasa, która dziedziczy z klasy Mage_Cms_Block_Abstract

Maga :: log (get_class (Mage :: app() -> getLayout() -> createBlock ("cms/block ') -> setBlockId ('. promo_space ')

Żadna z dwóch klas mają metody, które sprawdzają pogoda blok jest aktywny czy nie Jak to zrobić

Odpowiedz

5

Got to sobie

?

Utworzono metodę isActive (Identifiere, Value) w helperie "Block" w lokalnym module Mage/Cms.

ten sposób metoda wygląda

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

} 

parametr $ atrybut jest tabela (cms-block) pola takie jak „identyfikator” lub „tytuł” ​​i wartość może być nazwa statycznego bloku lub samego identyfikatora . Zarówno używane do filtrowania w dół konkretny blok statyczny jesteś zainteresowany

Oto jak zgłoszę pomocnika

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

Mam również uaktualniony plik config.xml dla bloku Cms czytać mojego nowego pomocnika i metoda.

Mam nadzieję, że będzie przydatny.

1

Może to jest stary, ale używam innej metody, która działa nie tylko dla bloków cms, ale dla każdego innego bloku załadowanego na układ. Jeśli chcesz sprawdzić, czy blok został załadowany:

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

To całkiem proste!

1

Lepszym sposobem na to jest dodanie obserwatora do tego zdarzenia: controller_action_layout_generate_blocks_after, który ma miejsce zaraz po zainicjowaniu i wygenerowaniu obiektów Block przez Magento. Masz dostęp do klas układ i działania oraz wszystkich generowanych przed blokami HTML jest renderowane

//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()

Wymień static_block_identifier z identyfikatoremprzypisana do CMS statycznego bloku.

3

Ten kod działa dla mnie:

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

pracował jak czar .. nice! –

Powiązane problemy