Statik blok FPC delgeç


16

Statik blok (cms blok) için bir FPC delgeç oluşturmanın en kolay yolu nedir?

Diyelim ki, her sayfa yükünde dinamik olmak istediğim davranışı olan başka bir bloğu çağıran statik bir bloğum var.

Yanıtlar:


10

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.

  1. 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());
        }
    
    }
  2. Ö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();
        }
    }
  3. 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>
  4. 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"}}


Teşekkürler Graham, bir deneyeceğim ve nasıl gittiğini size bildireceğim.
LDusan

Bu sizin için sorununuzu çözdü @LDusan?
Graham

Henüz denemedim, size bildireceğim :)
LDusan

Graham bence bu işe yarıyor, tek dezavantajı, önbelleğe alınmasını istemiyorsanız, mevcut cms blok sınıflarını değiştirmek zorunda kalacağınızdır, ancak bu iyi bir çözümdür. Teşekkürler.
LDusan

3

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 .


1

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.