2010-02-17 8 views
7

Me pregunto cómo verificar que un determinado bloque de CMS esté activo o no.¿Cómo verificar que el bloque CMS esté activo?

Hasta ahora he descubierto que el bloque CMS son Mage_Cms_Block_Block clase que hereda de la clase Mage_Cms_Block_Abstract

Mago :: log (get_class (Mago :: aplicación() -> getLayout() -> createBlock ('cms/block ') -> setBlockId ('. promo_space ')

Ninguna de las dos clases tienen métodos que hemos comprobado si el bloque está activo o no ¿Cómo lo hago

Respuesta

5

conseguí este mismo

?

Creé un método isActive (Identifiere, Value) en el "Bloque" auxiliar en el Módulo local de Mage/Cms.

Así es como el método busca

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

} 

parámetro $ atributo campo de tabla (CMS-bloque) como 'identificador' o 'título' y el valor puede ser el nombre del bloque estático o identificador propio . Ambos utilizaron para filtrar por el bloque estático en particular que usted está interesado en

Así es como yo llamo el ayudante

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

También he actualizado el archivo config.xml para el bloque Cms para leer mi nuevo ayudante y el método.

Espero que sea útil.

1

Quizás esto sea antiguo, pero utilizo otro método que funciona no solo para bloques cms sino también para cualquier otro bloque cargado en el diseño. Si necesita verificar si un bloque ha sido cargado:

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

¡Es bastante fácil!

1

Una mejor forma de hacerlo es agregar un observador a este evento: controller_action_layout_generate_blocks_after que ocurre justo después de que Magento haya inicializado y generado objetos Block. Usted tiene acceso a las clases de diseño y de acción y para todos los bloques generados antes HTML es interpretado

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

Reemplazar static_block_identifier con el identificador que asignó a su bloque estático CMS.

3

Este código funciona para mí:

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

trabajó como un encanto .. agradable! –

Cuestiones relacionadas