2012-09-13 65 views
6

मैं/vert_nav.phtml जोड़ सकते हैं या होम पेज पर सामग्री विशिष्ट को दबाने के लिए सूची/नेविगेशन में मौजूद निम्न दो विधियों की कोशिश की है:Magento .phtml में मुख पृष्ठ का पता लगाने कि BLOCK_HTML कैश के साथ काम करेंगे सक्षम

if($this->getUrl('') == $this->getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true))): 

या

if(
Mage::getSingleton('cms/page')->getIdentifier() == 'home' && 
Mage::app()->getFrontController()->getRequest()->getRouteName() == 'cms' 
) : 

दोनों ठीक काम करते हैं, लेकिन जब BLOCK_HTML कैश चालू होता है, यह पहली बार में काम करता है, तो वह केवल अन्य पन्नों के लिए लक्षित है थोड़ी देर के मुख पृष्ठ पर प्रदर्शित करना प्रारंभ कर सामग्री (मैं कम का उपयोग एक और को खंड के बाद के बाद नीचे)। जब मैं BLOCK_HTML को बंद करता हूं, तो यह अपेक्षा के अनुसार व्यवहार करता है।

दिलचस्प बात यह है कि मैंने पृष्ठ/एचटीएमएल/head.phtml (होम पेज विशिष्ट जावास्क्रिप्ट/सीएसएस के लिए) और पृष्ठ/एचटीएमएल/हेडर.एफटीएमएल (एक हेडर बैनर के लिए) में एक ही कोड (पहला एक) का उपयोग किया है केवल होम पेज पर दिखाना चाहिए), और यह काम ठीक है जब भी BLOCK_HTML चालू है।

(Magento 1.4.1.1)

उत्तर

4

उपर्युक्त उत्तर सबसे अच्छा समाधान है।

आप बस नकल कर सकता है ऐप्स/कोड/कोर/दाना/सूची/ब्लॉक/Nagivation.php

रहे हैं:

एप्लिकेशन/कोड/स्थानीय/दाना/सूची/ब्लॉक/Nagivation।PHP

और उसके बाद ऊपर वर्णित getCacheKeyInfo() विधि को बदलें।

/** 
* Get Key pieces for caching block content 
* 
* @return array 
*/ 
public function getCacheKeyInfo() 
{ 
    $shortCacheId = array(
     'CATALOG_NAVIGATION', 
     Mage::app()->getStore()->getId(), 
     Mage::getDesign()->getPackageName(), 
     Mage::getDesign()->getTheme('template'), 
     Mage::getSingleton('customer/session')->getCustomerGroupId(), 
     'template' => $this->getTemplate(), 
     'name' => $this->getNameInLayout(), 
     $this->getCurrenCategoryKey(), 
     // Your logic to make home/none home have different cache keys 
     Mage::getSingleton('cms/page')->getIdentifier() == 'home' ? '1' : '0' 
    ); 
    $cacheId = $shortCacheId; 

    $shortCacheId = array_values($shortCacheId); 
    $shortCacheId = implode('|', $shortCacheId); 
    $shortCacheId = md5($shortCacheId); 

    $cacheId['category_path'] = $this->getCurrenCategoryKey(); 
    $cacheId['short_cache_id'] = $shortCacheId; 

    return $cacheId; 
} 

यह कैश होमपेज/कोई भी-होमपेज पर पृष्ठों के लिए कुंजी अलग है, जो दो प्रतियां कैश होगा, बल्कि सभी पृष्ठों पर उपयोग के लिए एक एकल टेम्पलेट प्रतिलिपि कैशिंग से कर देगा।

+0

मेरी पोस्ट में बहुत बढ़िया इसके अलावा, इस लाइन में बस थोड़ा सा टाइपो है: 'मैगे :: गेट्सिंगटन (' सीएमएस/पेज ') -> getIdentifier() ==' home '? '1', '0'' -' मेज :: getSingleton ('cms/page') होना चाहिए -> getIdentifier() == 'home'? '1': '0'' सही ढंग से काम करने के लिए –

+0

धन्यवाद, इसे बिना किसी परीक्षण के ब्राउज़र में टाइप किया गया था :) – Andrew

4

यहाँ सूत्रों आप ब्लॉक एचटीएमएल कैश के बारे में पढ़ने के लिए गए हैं:

  1. magento forum
  2. some blog
  3. inchoo blog

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

  1. सबसे पहले - अपनी .phtml फ़ाइल के लिए एक कस्टम ब्लॉक निर्दिष्ट करें। यदि आपको पता नहीं है कि ब्लॉक क्या है, या टेम्पलेट फ़ाइल में ब्लॉक कैसे असाइन करें, here's एलन स्टॉर्म ब्लॉग का संदर्भ।
  2. दूसरा - यदि आप एक ब्लॉक निर्माता के बगल में कोड जोड़ने के लिए करना होगा:

    $this->addData(array(
        'cache_lifetime' => 3600, 
        'cache_tags'  => array(Mage_Cms_Model_Block::CACHE_TAG), 
        'cache_key'  => $this->getCacheKey(), 
    )); 
    

    जैसा कि आप देख, मैं यहाँ getCacheKey विधि अमूर्त वर्ग Mage_Core_Block_Abstract से इस्तेमाल किया।

  3. अब आपको यह सुनिश्चित करना होगा कि cache_key आपके तर्क के लिए काम करता है। Mage_Core_Block_Abstract::getCacheKey अन्य विधि का उपयोग करता है, जो वास्तव में हमारे ब्लॉक - getCacheKeyInfo के लिए अद्वितीय मान निर्दिष्ट करना चाहिए। आप अपने तर्क का उपयोग कर इसे फिर से परिभाषित करने की जरूरत है:

    public function getCacheKeyInfo() 
    { 
        $isHomepage = 0; 
        if (Mage::getSingleton('cms/page')->getIdentifier() == 'home') { 
         $isHomepage = 1; 
        } 
        return array(
         $this->getNameInLayout(), 
         $isHomepage, 
        ); 
    } 
    

    अब आप यह सुनिश्चित करें कि मुख पृष्ठ के लिए कैश कुंजी अपने पृष्ठों अन्य सभी के लिए कैश कुंजी से अलग होगा, और अपना संचय वैध जानकारी वापस आ जाएगी हो सकता है।

+0

उत्कृष्ट उत्तर, धन्यवाद। मैं एंड्रयू के जवाब का चयन करना समाप्त कर दिया क्योंकि यह एक त्वरित फिक्स था जो एक टेम्पलेट के साथ काम करता था जिसे मैंने मूल रूप से लिखा था। – rwired

2

हम का उपयोग

<!-- SNH CUSTOM --> 

    $route = Mage::app()->getFrontController()->getRequest()->getRouteName(); 

    $action = Mage::app()->getFrontController()->getRequest()->getActionName(); 

if($route == 'cms' && $action == 'index'): 

    <div class="grid_12"> 

     echo $this->getChildHtml('shopper_footer_partners'); 

    </div> 

endif; 
0

वास्तव में सबसे अच्छा तरीका है करने के लिए:

1 अद्यतन अपने लेआउट एक्सएमएल (local.xml या विषय custom.xml)

<!-- CUSTOM: ADD NEW FOOTER BLOCK AT BOTTOM FOR PARTNERS --> 
<cms_index_index> 
    <reference name="footer"> 
    <block type="cms/block" name="footer_block_extra"> 
     <action method="setBlockId"><block_id>footer_block_extra</block_id></action> 
    </block> 
    </reference> 
</cms_index_index> 

और चरण 2 ऐड यह कोड जहां आप अपने टेम्पलेट phtml (अक्सर /page/html/footer.phtml) में ब्लॉक चाहते हैं

<!-- SNH CUSTOM --> 
<div class="grid_12"> 
    <?php echo $this->getBlockHtml('footer_block_extra'); ?> 
</div> 

और चरण 3 आईडी "footer_block_extra" आईडी के साथ अपने बैकएंड में एक नया सीएमएस ब्लॉक बनाएं ... और अपनी सामग्री जोड़ें।

2

बस इन उत्तरों में जोड़ने के लिए यह जांचने का सुझाव है कि वर्तमान पृष्ठ पहचानकर्ता "घर" के बराबर है या नहीं।

इसके बजाय Mage::getStoreConfig('web/default/cms_home_page') के साथ इसकी तुलना करना निश्चित रूप से सुरक्षित होगा।

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