जवाबों:
मैगेंटो एंटरप्राइज के फुल पेज कैशिंग मॉड्यूल में सीएमएस ब्लॉकों को छेदने का सबसे आसान तरीका कुछ चरणों में है:
पहले, चलो आवश्यक निर्देशिका संरचना को देखें:
BranchLabs/CacheBuster/
Block/Cms.php # We inherit almost all functions from the Mage CMS
block, only overriding the "getCacheKeyInfo" function.
We do this to set the CMS block ID for later use by
our placeholder model.
etc/cache.xml # Here we target our module's version of the CMS block
and set their cache lifetimes to 0.
Model/Placeholder.php # This module is responsible for freshly rendering our
CMS blocks every time they're requested.
मन में ऊपर-नीचे समझ के साथ कि यहाँ उन फाइलों को कैसे भरना है।
अपनी खुद की ब्लॉक क्लास बनाएं जो कि Magento CMS ब्लॉक में बनी हो। आपको "getCacheKeyInfo" फ़ंक्शन को भी इस प्रकार से ओवरराइड करना होगा:
<?php
// BranchLabs/CacheBuster/Block/Cms.php
class BranchLabs_CacheBuster_Block_Cms extends Mage_Cms_Block_Block {
// Used to set the cache placeholder attribute definitions, required in
// the placeholder's "_renderBlock" function.
public function getCacheKeyInfo() {
return array('block_id' => $this->getBlockId());
}
}
प्लेसहोल्डर मॉडल सेट करें जो कैश को लागू किए बिना हमारे सीएमएस ब्लॉक को रेंडर करने के लिए जिम्मेदार है।
<?php
// BranchLabs/CacheBuster/Model/Placeholder.php
class BranchLabs_CacheBuster_Model_Placeholder extends Enterprise_PageCache_Model_Container_Abstract {
public function applyWithoutApp(&$content)
{
return false;
}
protected function _getCacheId()
{
$id = 'CACHEBUSTER_HOLEPUNCH_' . microtime() . '_' . rand(0,99);
return $id;
}
/**
* CacheBuster doesn't cache data! Do nothing.
*/
protected function _saveCache($data, $id, $tags = array(), $lifetime = null)
{
return $this;
}
/**
* Render fresh block content.
*
* @return false|string
*/
protected function _renderBlock()
{
$block = $this->_placeholder->getAttribute('block');
$block = new $block;
// Get the block_id attribute we originally set in our CMS block's
// getCacheKeyInfo function.
$block_id = $this->_placeholder->getAttribute('block_id');
$block->setBlockId($block_id);
$block->setLayout(Mage::app()->getLayout());
return $block->toHtml();
}
}
हमारे नए बनाए गए CMS ब्लॉक को लक्षित करने और हमारे नए बनाए गए प्लेसहोल्डर का उपयोग करके रेंडर करने के लिए cache.xml सेट करें।
<!-- BranchLabs/CacheBuster/etc/cache.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<config>
<placeholders>
<arbitrary_unique_identifier>
<block>cachebuster/cms</block>
<placeholder>ARBITRARY_UNIQUE_IDENTIFIER</placeholder>
<container>BranchLabs_CacheBuster_Model_Placeholder</container>
<cache_lifetime>0</cache_lifetime>
</arbitrary_unique_identifier>
</placeholders>
</config>
CMS में, उन ब्लॉकों के लिए ब्लॉक प्रकारों को बदलें, जिन्हें आप कैश के बाहर प्रस्तुत करने की कोशिश कर रहे हैं, जो हमारे नए खनन किए गए CMS प्रूफ ब्लॉक के साथ हैं: {{block type="cachebuster/cms" block_id="cacheproof"}}
समस्या यह है कि मैगेंटो कोर टीम स्थिर ब्लॉकों को कैश करना भूल गई है और जो व्यक्तिगत रूप से कैश नहीं किया गया है, उसे छिद्रित नहीं किया जा सकता है।
तो इसका समाधान पहले कैशिंग को ठीक करना है ।
दरअसल, समाधान यह होगा कि कैशिंग करने के तरीके को बदलना होगा।
Lesti की FPC मेरे स्मारिका में यह अधिकार कर रही है, और यह मुफ़्त है। इसमें केवल एकाधिक वेबसाइटों के समर्थन का अभाव है, लेकिन यह 1 वेबसाइट के लिए एकदम सही है, आप उन ब्लॉकों को निर्दिष्ट कर पाएंगे जो गतिशील रूप से छेद-छिद्रित होने चाहिए।
मैंने एमस्टी की एफपीसी की भी कोशिश की, आपको इसके लिए भुगतान करना होगा और सीई मुझे लगता है कि यह सही कैशिंग समाधान नहीं है, लेकिन यह अच्छी तरह से काम कर रहा है, आप ब्लॉक / पेज या दोनों के कैशिंग निर्दिष्ट कर सकते हैं। आप कैश्ड ऑब्जेक्ट्स की संपीड़न दर भी निर्धारित कर सकते हैं और उन्हें डीबी / फाइलसिस्टम (धीमी) या मेमकेच्ड में स्टोर कर सकते हैं।
आप शुभकामनाएँ।