স্ট্যাটিক ব্লক এফপিসি হোল পাঞ্চ


16

স্ট্যাটিক ব্লক (সেমি ব্লক) এর জন্য এফপিসি হোল পাঞ্চ তৈরির সহজ উপায় কী হবে?

আসুন আমি বলি যে আমার কাছে একটি স্ট্যাটিক ব্লক রয়েছে যা অন্য একটি ব্লকে কল করে যার মধ্যে এমন আচরণ রয়েছে যা আমি প্রতিটি পৃষ্ঠার লোডে গতিশীল হতে চাই।

উত্তর:


10

ম্যাজেন্টো এন্টারপ্রাইজের ফুল পেজ ক্যাচিং মডিউলটিতে সিএমএস ব্লকগুলি হোলপঞ্চ করার সবচেয়ে সহজ উপায়টির কয়েকটি পদক্ষেপ রয়েছে:

প্রথমে প্রয়োজনীয় ডিরেক্টরি কাঠামোটি দেখুন:

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.

সেই টপ-ডাউন বোঝার সাথে এই ফাইলগুলি কীভাবে পূরণ করবেন তা এখানে রয়েছে।

  1. আপনার নিজস্ব ব্লক শ্রেণি তৈরি করুন যা ম্যাগন্টো সিএমএস ব্লকে অন্তর্নির্মিত প্রসারিত করে। নিম্নলিখিত হিসাবে আপনার "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());
        }
    
    }
  2. ক্যাশে প্রয়োগ না করে আমাদের সিএমএস ব্লকটি সরবরাহ করার জন্য দায়ী প্লেসহোল্ডার মডেল সেট আপ করুন।

    <?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. আমাদের সদ্য নির্মিত সিএমএস ব্লকটি লক্ষ্যবস্তু করতে এবং আমাদের সদ্য নির্মিত স্থানধারকটি ব্যবহার করে রেন্ডার করতে 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>
  4. সিএমএসে, আপনি আমাদের নতুন মিন্টেড সিএমএস-প্রুফ ব্লক দিয়ে ক্যাশের বাইরে যে সমস্ত ব্লক রেন্ডার চেষ্টা করছেন তার জন্য ব্লক ধরণের প্রতিস্থাপন করুন: {{block type="cachebuster/cms" block_id="cacheproof"}}


ধন্যবাদ গ্রাহাম, আমি একবার চেষ্টা করে দেখব এবং কীভাবে গেল তা আপনাকে জানাব।
এলডুসান

এটি আপনার @ এলডুসানের জন্য আপনার সমস্যার সমাধান করেছে?
গ্রাহাম

এটি এখনও চেষ্টা করে দেখুন না, আমি আপনাকে
জানিয়ে দেব

গ্রাহাম আমি মনে করি এটি কাজ করে, একমাত্র ব্যর্থতা হ'ল আপনি যদি বিদ্যমান সেমি ব্লক ক্লাসগুলি ক্যাশে না করতে চান তবে পরিবর্তন করতে হবে, তবে এটি একটি ভাল সমাধান নির্বিশেষে। ধন্যবাদ।
এলডুসান

3

সমস্যাটি হ'ল মাগেন্তোর মূল দল স্ট্যাটিক ব্লকগুলি ক্যাশে করতে ভুলে গিয়েছিল এবং যা স্বতন্ত্রভাবে ক্যাশে হয় না তা গর্ত-খোঁচা হতে পারে না।

সুতরাং সমাধানটি প্রথমে ক্যাচিং ঠিক করা


1

প্রকৃতপক্ষে, সমাধানটি হবে ক্যাশেিংয়ের পদ্ধতিটি পরিবর্তন করা।

লেস্টির এফপিসি আমার স্যুভেনিরে এটি সঠিকভাবে করছে, এবং এটি বিনামূল্যে। এটিতে একাধিক ওয়েবসাইটের সমর্থন নেই, তবে এটি 1 টি ওয়েবসাইটের জন্য উপযুক্ত যা আপনি গতিরোধকভাবে গর্তযুক্ত হতে হবে এমন ব্লকগুলি নির্দিষ্ট করতে সক্ষম হবেন।

আমি আমাস্টির এফপিসিটিও চেষ্টা করেছিলাম, আপনাকে এর জন্য অর্থ প্রদান করতে হবে এবং এটি সিই অনুমান করে নিখুঁত ক্যাচিং সমাধান নয়, তবে এটি ভালভাবে কাজ করছে, আপনি ব্লক / পৃষ্ঠাগুলি বা উভয়ই ক্যাশে নির্দিষ্ট করতে পারবেন। আপনি ক্যাশেড অবজেক্টগুলির সংক্ষেপণের হার সেট করে ডিবি / ফাইলসিসমে (ধীর) বা মেমচেড এ সঞ্চয় করতে পারেন।

তোমার জন্য সৌভাগ্যের কামনা.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.