ক্যাচবলের সাথে ব্লক করুন = পণ্য দেখুন পৃষ্ঠায় মিথ্যা রেন্ডার হয়নি


21

আমি magento2-1.0.0-beta4 ব্যবহার করছি

আমি checkout.rootব্লকটি app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xmlপণ্য পৃষ্ঠাতে অনুলিপি করেছি ।

যতক্ষণ না আমি সক্ষম করি ততক্ষণ সবকিছু ঠিকঠাক কাজ করছে page_cache। ব্লকটি cacheable="false"লেআউট এক্সএমএলে রয়েছে।

এখন আমি যখন আমার পণ্য পৃষ্ঠাটি খুলি তখন ব্লকটি মোটেও রেন্ডার হয় না।

যদি আমি পৃষ্ঠা ক্যাশেটি সঠিকভাবে বুঝতে পারি তবে এটি এজেএক্স কলের মাধ্যমে এই জাতীয় ব্লক লোড করা উচিত। আমার ব্রেক পয়েন্টটি \Magento\PageCache\Controller\Block\Render::executeকখনই হিট না হওয়ায় এমন একটি এজেএক্স কল হবে বলে মনে হয় না।

খোলার সময় /checkout/বা /checkout/cart/সবকিছু কাজ করে। তবে এজেএক্স কল হবে বলে মনে হয় না। পরিবর্তে পুরো পৃষ্ঠাটি ক্যাশে থেকে উপস্থাপন করা হয় বলে মনে হয় না, যা কার্টটির জন্য অর্থবোধ করে।

সুতরাং আমি কি কেবলমাত্র পণ্য ভিউ পৃষ্ঠাটি বাদ দিতে পারি page_cache? কিন্তু আমি কি এর উপায় খুঁজে পাইনি?

উত্তর:


15

এই সমস্যাটি এখনও ম্যাজেন্টো ২.০.০ স্থিতিতে পুনরুত্পাদনযোগ্য।

ম্যাজেন্টো 2 ব্যতিক্রমী হ্যান্ডলিংয়ে একটি বৈশিষ্ট্য রয়েছে, যা অন্যান্য সমস্ত ব্লক এখনও রেন্ডার করা অবস্থায় ভাঙা ব্লকগুলির রেন্ডারিংকে বাধা দেয়। বিকাশকারী মোডে এটি অক্ষম করা আছে এবং সমস্ত ব্যতিক্রম সরাসরি ব্রাউজারে প্রদর্শিত হয়। ডিফল্ট এবং উত্পাদন মোডগুলিতে, যদি ব্লক রেন্ডারিংয়ের সময় ব্যতিক্রম ঘটে, তবে ব্লকটি কেবল আউটপুট থেকে সরিয়ে ফেলা হবে (সংশ্লিষ্ট ব্যতিক্রমটি এখনও var / লগ / সিস্টেম.লগে লগ হয় )। দেখুন \Magento\Framework\View\Layout::renderNonCachedElement()

পণ্য পৃষ্ঠায় চেকআউট ব্লক রেন্ডারিং সময় অনুসরণ ব্যতিক্রম ঘটে এবং এই কারণে এই ব্লক হারিয়েছে: main.CRITICAL: No such entity with customerId = [] []

এই ব্যতিক্রমটির কারণ হ'ল সেশন স্টোরেজে থাকা customerLoggedIn == trueগ্রাহকের ডেটা \Magento\PageCache\Model\Layout\DepersonalizePlugin::afterGenerateXml()কার্যকর হওয়ার পরে বেমানান অবস্থায় রয়েছে ( এবং গ্রাহকের ডেটা অনুপস্থিত) । এই প্লাগইনটি বর্তমান পিএইচপি সেশনটি বন্ধ করে এবং এভাবে গ্রাহকের ডেটা সেশন স্টোরেজ থেকে সরিয়ে দেয়। এটি কেবল তখনই ঘটে যখন পৃষ্ঠাটি সম্পূর্ণরূপে ক্যাশেযোগ্য হয় (এবং এটি আসলে হয়)।

পৃষ্ঠাটিকে কেবল ক্যাশে মডিউল দ্বারা ক্যাশেযোগ্য বিবেচনা করা হবে যদি এর বিন্যাসে ব্লক না থাকে cacheable="false"। এই বৈশিষ্ট্যটি যুক্ত করা এই ব্লকটি অ্যাজাক্স দ্বারা বোঝা তৈরি করবে না (প্রশ্নে অনুমান হিসাবে)। অ্যাজাক্স দ্বারা কিছু ব্লক লোড করার জন্য, এই ব্লকটি এমন সম্পত্তি হিসাবে ঘোষণা করা উচিত ছিল _isScopePrivateযা সেট করা আছে true, তদ্ব্যতীত, cacheable="false"পৃষ্ঠায় কোনও ব্লক নেই । দেখুন \Magento\PageCache\Observer\ProcessLayoutRenderElement::execute()এবং mage.pageCache._replacePlaceholder()মধ্যে Magento / PageCache / দৃশ্য / ফ্রন্টএন্ড / ওয়েব / JS / পৃষ্ঠা-cache.jsপৃষ্ঠা ক্যাশে মডিউল রিডমে উচ্চ স্তরের ডক্সও পরীক্ষা করে দেখুন

cacheable="false"চেকআউট ব্লকের জন্য সেট করা থেকে পণ্য পৃষ্ঠাটি ক্যাশেযোগ্য হওয়া উচিত নয় , তবে এটি পরিচিত জ্ঞানের কারণে অচিহ্নবদ্ধ ব্লকগুলি ক্যাশে হওয়ার কারণে । যতক্ষণ না এই সমস্যাটির সমাধান হয় ততক্ষণ নীচের কাজটি ব্যবহার করা যেতে পারে (কেন এটি কাজ করে তা আমাকে জিজ্ঞাসা করবেন না, এটি একটি দীর্ঘ গল্প):

  1. যাও \Magento\Framework\Pricing\Render\Layout::__construct
  2. পরিবর্তন ['cacheable' => $generalLayout->isCacheable()]করুন['cacheable' => false]

এটির ক্ষতি হওয়া উচিত নয় কারণ চেকআউট ব্লক যুক্ত করার পরে পণ্যের পৃষ্ঠাগুলি কোনওভাবে ক্যাশে হবে না

আরেকটি প্রশ্ন হ'ল আপনি কি বিল্ট-ইন পেজ ক্যাশে বা বার্নিশ দ্বারা পণ্য পৃষ্ঠাগুলিকে নন-ক্যাশেযোগ্য করতে চান?


1
সর্বশেষ magento2 সংস্করণে এই সমস্যার জন্য কোনও আপডেট? @ অ্যালেক্স
কিউর শাহ

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