EE 1.14.2 / সিই 1.9.2 ব্লক ক্যাচিং আপডেটে অ-স্বতন্ত্র ক্যাশে কী রয়েছে - সীমান্তে ডুপ্লিকেট সামগ্রী প্রদর্শিত হচ্ছে


18

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

আমি জানি না যে সিই ১.৯.২ প্রকাশিত হওয়ার পরে এই একই সমস্যাটি উপস্থিত হবে কিনা তবে যারা এই সমস্যাটি খুঁজে পেতে পারে তাদের জন্য আমি আমার সমাধানটি এখানে রাখতে চেয়েছিলাম।

আপডেট: এখানে নিশ্চিত হিসাবে একই সমস্যা সিই 1.9.2 সালে এসেছিল


উত্তর:


11

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

সমস্যাটি হ'ল যে 1.14.2 তে যুক্ত করা ব্লক ক্যাচিং পদ্ধতিটি একটি অনন্য ক্যাশে কী উত্পন্ন করছিল না তাই যখন আমার কাছে বিভাগের নিয়ামক স্পেসে একাধিক ব্লক ব্যবহৃত হয়েছিল, তখন উত্পন্ন ক্যাশে কীটি প্রথম পৃষ্ঠার হিটের জন্যই অনন্য হয়ে গিয়েছিল, ফলস্বরূপ সেই সমস্ত পৃষ্ঠাগুলির সদৃশ সামগ্রী প্রদর্শন করা।

সমাধানটি নিম্নলিখিতটি যুক্ত করা হয়েছিল (সংযোজনগুলির আশেপাশের প্রসঙ্গটি দেখানোর জন্য পৃথক ফাইল ফর্ম্যাটে প্রদর্শিত হবে - কেবল যেখানে + তাদের যেতে হবে সেখানে লাইনগুলিতে যুক্ত করুন):

অ্যাপ্লিকেশন / কোড / কোর / মাইজে / সেমি / ব্লক / ব্লক.এফপি 72 লাইনে:

         }
         return $html;
     }
+
+    /**
+     * Retrieve values of properties that unambiguously identify unique content
+     *
+     * @return array
+     */
+    public function getCacheKeyInfo()
+    {
+        $blockId = $this->getBlockId();
+        if ($blockId) {
+            $result = array(
+                $blockId,
+                Mage::app()->getStore()->getCode(),
+            );
+        } else {
+            $result = parent::getCacheKeyInfo();
+        }
+        return $result;
+    }
 }

অ্যাপ্লিকেশন / কোড / কোর / মাইজে / সেমি / ব্লক / উইজেট / ব্লক.এফপি 82 লাইনে:

                 $helper = Mage::helper('cms');
                 $processor = $helper->getBlockTemplateProcessor();
                 $this->setText($processor->filter($block->getContent()));
+                $this->addModelTags($block);
             }
         }

         unset(self::$_widgetUsageMap[$blockHash]);
         return $this;
     }
+
+    /**
+     * Retrieve values of properties that unambiguously identify unique content
+     *
+     * @return array
+     */
+    public function getCacheKeyInfo()
+    {
+        $result = parent::getCacheKeyInfo();
+        $blockId = $this->getBlockId();
+        if ($blockId) {
+            $result[] = $blockId;
+        }
+        return $result;
+    }
 }

আমি ভাবব না যে আমি এই সমস্যাটি দেখার একমাত্র ব্যক্তি এবং এটি যদি সিই ১.৯.২০ এ প্রদর্শিত হয়, আশা করি এটি কিছু লোকের সমাধান করতে সহায়তা করবে।


দুর্ভাগ্যক্রমে এটি সিই ১.৯.২ এ পরিণত হয় নি যা গতকাল প্রকাশিত হয়েছিল তাই আমি আপগ্রেড হওয়ার পরে আমাদের এক ক্লায়েন্ট ওয়েবসাইটে এই ইস্যুটিতে চলে এসেছি। এই ঠিক করার চেষ্টা করবে।
মার্কো মিলটেনবার্গ

এটি আমার পক্ষে কাজ করছে না
পিক্সেলমো

10

আমি মনে করি সঠিক উপায়টি হ'ল আমাদের কাস্টম মডিউল তৈরি করা দরকার কারণ আপনি সকলেই জানেন যে ম্যাজেন্টো বুগিম্যান আপনাকে পাবেন! যদি কোর পরিবর্তন হয় :)

আপনার নিম্নলিখিত ফাইলগুলি প্রয়োজন: app/etc/modules/Bhupendra_Cms.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Bhupendra_Cms>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Cms/>
            </depends>
        </Bhupendra_Cms>
    </modules>
</config>

app/code/local/Bhupendra/Cms/etc/config.xml

<?xml version="1.0"?>
<config>
        <modules>
            <Bhupendra_Cms>
                <version>1.0.0</version>
            </Bhupendra_Cms>
        </modules>
        <global>
            <blocks>
                <cms>
                    <rewrite>
                        <block>Bhupendra_Cms_Block_Block</block>
                        <widget_block>Bhupendra_Cms_Block_Widget_Block</widget_block>
                    </rewrite>
                </cms>
            </blocks>
        </global>
</config>

app/code/local/Bhupendra/Cms/Block/Block.php

<?php
class Bhupendra_Cms_Block_Block extends Mage_Cms_Block_Block {

   public function getCacheKeyInfo()
    {

      $blockId = $this->getBlockId();
      if ($blockId) {
            $result = array(
                $blockId,
                Mage::app()->getStore()->getCode(),
            );
      } else {
           $result = parent::getCacheKeyInfo();
       }
       return $result;
   }

}

app/code/local/Bhupendra/Cms/Block/Widget/Block.php

class Bhupendra_Cms_Block_Widget_Block extends Mage_Cms_Block_Widget_Block
{
       /**
     * Storage for used widgets
     *
     * @var array
     */
    static protected $_widgetUsageMap = array();

    /**
     * Prepare block text and determine whether block output enabled or not
     * Prevent blocks recursion if needed
     *
     * @return Mage_Cms_Block_Widget_Block
     */
    protected function _beforeToHtml()
    {
        parent::_beforeToHtml();
        $blockId = $this->getData('block_id');
        $blockHash = get_class($this) . $blockId;

        if (isset(self::$_widgetUsageMap[$blockHash])) {
            return $this;
        }
        self::$_widgetUsageMap[$blockHash] = true;

        if ($blockId) {
            $block = Mage::getModel('cms/block')
                ->setStoreId(Mage::app()->getStore()->getId())
                ->load($blockId);
            if ($block->getIsActive()) {
                /* @var $helper Mage_Cms_Helper_Data */
                $helper = Mage::helper('cms');
                $processor = $helper->getBlockTemplateProcessor();
                $this->setText($processor->filter($block->getContent()));
                $this->addModelTags($block);
            }
        }

        unset(self::$_widgetUsageMap[$blockHash]);
        return $this;
    }

     /**
     * Retrieve values of properties that unambiguously identify unique content
     *
     * @return array
     */
    public function getCacheKeyInfo()
    {
        $result = parent::getCacheKeyInfo();
        $blockId = $this->getBlockId();
        if ($blockId) {
            $result[] = $blockId;
       }
        return $result;
   }
}

আরও তথ্যের জন্য আপনি নীচের ব্লগটি দেখতে পারেন এবং এটি থেকে ডাউনলোড করতে পারেন https://www.milople.com/blogs/ecommerce/solve-magento-static- block-display-issue.html


আপনি এটি সুরকারের সাথে একটি মডিউলে কেন প্যাক করবেন না?
আলেক্সে রাজ্জাকভ

আমি এই পোস্টে তেমন সাড়া পাইনি তাই ভেবেছিলাম কোনও দেহই মডিউলে এটি চায় না
ভূপেন্দ্র জাদেজা

এখনও কারও এই সমস্যা ছিল না। কেউ এখনও নতুন ম্যাজেন্টো সংস্করণ ব্যবহার করে না।
আমারে টারপেনটাইনের

এই মডিউলটি ডাউনলোড করার জন্য আমি লিঙ্কটি যুক্ত করেছি
ভূপেন্দ্র জাদেজা


4

সিএমএস ব্লকগুলি ক্যাশে করার ক্ষেত্রে আরও একটি সমস্যা রয়েছে, এটি উপরের প্রদত্ত কোডের সাথে স্থির নয়।

আপনি যদি নিজের সিএমএস ব্লকগুলিতে সুরক্ষিত ইউআরএল এবং {{মিডিয়া are} ট্যাগ ব্যবহার করছেন তবে আপনি ব্রাউজার থেকে "সুরক্ষিত সামগ্রী সতর্কতা" বার্তাটি পাবেন, যেহেতু ম্যাজেন্টো ক্যাশে থেকে সুরক্ষিত লিঙ্কগুলি সরবরাহ করে।

এটি সমাধানের জন্য আপনাকে আরও একটি ক্যাশে তথ্য ট্যাগ যুক্ত করতে হবে

(int)Mage::app()->getStore()->isCurrentlySecure(),

1

এই বাগটি এই সামান্য এক্সটেনশনের সাথেও স্থির করা যেতে পারে (কোর ফাইলগুলি সম্পাদনা করার বা ব্লকগুলি পুনরায় লেখার প্রয়োজন নেই):

https://github.com/progammer-rkt/Rkt_SbCache

এবং এতে অনিরাপদ সামগ্রী সতর্কতা এড়াতে @ অ্যাডভান্সডলজিক দ্বারা উল্লিখিত লাইনটিও রয়েছে:

(int)Mage::app()->getStore()->isCurrentlySecure()


এটি কোনওভাবে 1 টি ব্লকের জন্য কাজ করে নি
আলেক্সে রাজ্জাকভ

কোন ব্লকের জন্য? আমি বুঝতে পারছি না, আপনি আরও নির্দিষ্ট করতে পারেন দয়া করে?
জিতিক্স

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