2010-02-17 8 views
7

मुझे आश्चर्य है कि यह जांचने के लिए कि कोई विशेष सीएमएस ब्लॉक सक्रिय है या नहीं।सीएमएस ब्लॉक की जांच कैसे करें सक्रिय है?

अब तक मैं ने पाया है कि सीएमएस ब्लॉक Mage_Cms_Block_Block वर्ग कि Mage_Cms_Block_Abstract वर्ग

दाना :: लॉग (get_class (दाना :: एप्लिकेशन() से विरासत हैं -> getLayout() -> createBlock ('सेमी/ब्लॉक ') -> setBlockId ('। promo_space ')

दो वर्गों में से कोई तरीकों कि जाँच करेगा मौसम ब्लॉक सक्रिय है या नहीं है कैसे मैं इसे अपने आप क्या करते हो

उत्तर

5

इस समझे

?

मैंने मैज/सीएमएस स्थानीय मॉड्यूल में सहायक "ब्लॉक" में एक्टिव (आइडेंटिफ़ीयर, वैल्यू) एक विधि बनाई है।

यह कैसे विधि जैसे 'पहचानकर्ता' या 'शीर्षक' और मूल्य के रूप में लग रहा है

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

} 

पैरामीटर $ विशेषता तालिका (सेमी-ब्लॉक) क्षेत्र है स्थिर ब्लॉक या पहचानकर्ता के ही नाम हो सकता है । दोनों विशेष स्थिर ब्लॉक आप में

यहाँ है मैं कैसे सहायक

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

मैं को CMS ब्लॉक के लिए config.xml फ़ाइल को अद्यतन किया है अपने नए सहायक को पढ़ने के लिए और कॉल रुचि रखते हैं नीचे फिल्टर करने के लिए इस्तेमाल किया तरीका।

मुझे आशा है कि यह उपयोगी होगा।

1

शायद यह पुराना है, लेकिन मैं एक और विधि का उपयोग करता हूं जो न केवल सीएमएस ब्लॉक के लिए काम करता है बल्कि लेआउट पर लोड किए गए किसी भी अन्य ब्लॉक के लिए काम करता है। यदि आपको यह जांचने की आवश्यकता है कि कोई ब्लॉक लोड किया गया है:

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

यह बहुत आसान है!

1

ऐसा करने का एक बेहतर तरीका इस घटना में पर्यवेक्षक को जोड़ना है: नियंत्रक_action_layout_generate_blocks_after जो Magento ने ब्लॉक ऑब्जेक्ट्स को प्रारंभ और उत्पन्न करने के ठीक बाद होता है। पहले का 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 बदलें आप लेआउट और कार्रवाई वर्गों के लिए और सभी उत्पन्न ब्लॉक की पहुंच है।

3

इस कोड मेरे लिए काम करता है:

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

एक आकर्षण की तरह काम किया .. अच्छा! –

संबंधित मुद्दे