Yanıtlar:
Magento Enterprise'ın Tam Sayfa Önbellek modülünde CMS bloklarını delmek için bulduğum en kolay yolun birkaç adımı var:
İlk olarak, gerekli dizin yapısına bakalım:
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.
Bu yukarıdan aşağıya anlayışla, bu dosyaları nasıl dolduracağınız aşağıda açıklanmıştır.
Yerleşik Magento CMS bloğunu genişleten kendi blok sınıfınızı oluşturun. "GetCacheKeyInfo" işlevini de aşağıdaki gibi geçersiz kılmanız gerekir:
<?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());
}
}
Önbelleği uygulamadan CMS bloğumuzu oluşturmaktan sorumlu yer tutucu modeli ayarlayın.
<?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();
}
}
Yeni oluşturulan CMS bloğumuzu hedeflemek ve yeni oluşturulan yer tutucumuzu kullanarak oluşturmak için cache.xml dosyasını ayarlayın.
<!-- 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'de, önbellek dışında oluşturmaya çalıştığınız blokların blok türlerini yeni basılmış CMS korumalı bloğumuzla değiştirin: {{block type="cachebuster/cms" block_id="cacheproof"}}
Sorun, Magento çekirdek ekibinin statik blokları önbelleğe almayı unutması ve ayrı ayrı önbelleğe alınmayanların delinememesi.
Dolayısıyla çözüm, önce önbelleği düzeltmektir .
Gerçekten de çözüm, önbelleğe alma işlemini değiştirmek olacaktır.
Lesti'nin FPC'si bunu hatıra hediyemde yapıyor ve ücretsiz. Sadece birden fazla web sitesi desteğinden yoksundur, ancak 1 web sitesi için mükemmeldir ve dinamik olarak delinmesi gereken blokları belirtebilirsiniz.
Ayrıca Amasty'nin FPC'sini de denedim, bunun için ödeme yapmanız gerekecek ve sanırım CE için mükemmel bir önbellek çözümü değil, ama iyi çalışıyor, blokların / sayfaların veya her ikisinin önbelleğe alınmasını belirtebilirsiniz. Ayrıca önbelleğe alınan nesnelerin sıkıştırma oranını ayarlayabilir ve bunları Db / Dosya sisteminde (yavaş) veya memcached'de saklayabilirsiniz.
Sana şans diliyorum.