यह मुद्दा अभी भी Magento 2.0.0 स्थिर पर प्रतिलिपि प्रस्तुत करने योग्य है।
Magento 2 अपवाद हैंडलिंग में एक विशेषता है, जो टूटे हुए ब्लॉकों के प्रतिपादन को रोकता है जबकि अन्य सभी ब्लॉक अभी भी प्रदान किए जाते हैं। डेवलपर मोड में यह अक्षम है और सभी अपवाद ब्राउज़र में सही प्रदर्शित होते हैं। डिफ़ॉल्ट और उत्पादन मोड में, यदि ब्लॉक रेंडरिंग के दौरान अपवाद होता है, तो ब्लॉक को आउटपुट से हटा दिया जाएगा (इसी अपवाद को अभी भी var / log / system.log पर लॉग किया गया है )। देख लो \Magento\Framework\View\Layout::renderNonCachedElement()
।
उत्पाद पृष्ठ पर चेकआउट ब्लॉक रेंडरिंग के दौरान निम्न अपवाद होता है और यही कारण है कि यह ब्लॉक गायब है main.CRITICAL: No such entity with customerId = [] []
:।
इस अपवाद का कारण यह है कि निष्पादन के customerLoggedIn == true
बाद सत्र भंडारण में ग्राहक डेटा असंगत स्थिति में है ( और ग्राहक डेटा गायब है) \Magento\PageCache\Model\Layout\DepersonalizePlugin::afterGenerateXml()
। यह प्लगइन वर्तमान PHP सत्र को बंद करता है और इस प्रकार सत्र भंडारण से ग्राहक डेटा को निकालता है। यह केवल तभी होता है जब पृष्ठ पूरी तरह से उपलब्ध नहीं हो (और यह वास्तव में है)।
पृष्ठ को कैश कैश मॉड्यूल द्वारा केवल तभी माना जा सकता है जब उसके लेआउट में ब्लॉक न हों cacheable="false"
। इस विशेषता को जोड़ने से यह ब्लॉक अजाक्स द्वारा लोड नहीं किया जाएगा (जैसा कि प्रश्न में माना गया है)। कुछ ब्लॉक अजाक्स द्वारा लोड किए जा करवाने के लिए, इस ब्लॉक संपत्ति घोषित किया जाना चाहिए था _isScopePrivate
जो करने के लिए सेट कर दिया जाता true
, इसके अलावा, वहाँ के साथ कोई ब्लॉक होना चाहिए cacheable="false"
पृष्ठ पर। देखें \Magento\PageCache\Observer\ProcessLayoutRenderElement::execute()
और mage.pageCache._replacePlaceholder()
में Magento / पेजकैश / देखें / दृश्यपटल / वेब / js / पेज-cache.js । पृष्ठ कैश मॉड्यूल रीडमी में उच्च-स्तरीय डॉक्स भी जांचें
cacheable="false"
चेकआउट ब्लॉक के लिए सेट किए जाने के बाद से उत्पाद पृष्ठ को अस्वीकार्य नहीं किया जाना चाहिए , हालांकि यह ज्ञात समस्या के कारण अस्वीकार्य ब्लॉक कैश किया गया है । जब तक यह समस्या हल नहीं हो जाती, तब तक निम्न समाधान का उपयोग किया जा सकता है (मुझसे यह न पूछें कि यह काम क्यों करता है, यह एक लंबी कहानी है):
- के लिए जाओ
\Magento\Framework\Pricing\Render\Layout::__construct
- बदलें
['cacheable' => $generalLayout->isCacheable()]
करने के लिए['cacheable' => false]
इससे नुकसान नहीं होना चाहिए क्योंकि चेकआउट ब्लॉक को जोड़ने के बाद उत्पाद पृष्ठों को कैश नहीं किया जाएगा
एक अन्य प्रश्न यह है कि क्या आप वास्तव में बिल्ट-इन पेज कैश या वार्निश द्वारा उत्पाद पृष्ठों को गैर-परिवर्तनीय बनाना चाहते हैं?