उत्पाद दृश्य पृष्ठ पर Cachable = false के साथ ब्लॉक नहीं किया गया


21

मैं Magento2-1.0.0-beta4 का उपयोग कर रहा हूं

मैंने उत्पाद पृष्ठ checkout.rootसे ब्लॉक की प्रतिलिपि बनाई है app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml

जब तक मैं सक्षम नहीं करता, तब तक सब कुछ ठीक चल रहा है page_cachecacheable="false"लेआउट XML में वह ब्लॉक है ।

अब जब मैं अपना उत्पाद पृष्ठ खोलता हूं, तो ब्लॉक बिल्कुल भी प्रस्तुत नहीं होता है।

अगर मुझे पेज कैश सही तरीके से समझ में आया है, तो उसे AJAX कॉल के जरिए ऐसे ब्लॉक लोड करने चाहिए। लेकिन इस तरह के AJAX कॉल के बारे में ऐसा प्रतीत नहीं होता है कि मेरा ब्रेक प्वाइंट \Magento\PageCache\Controller\Block\Render::executeकभी हिट नहीं हुआ है।

जब खोलने /checkout/या /checkout/cart/सब कुछ काम करता है। लेकिन वहाँ भी AJAX कॉल नहीं लगता है। इसके बजाय पूरा पृष्ठ कैश से प्रदान नहीं किया गया है, जो कार्ट के लिए समझ में आता है।

तो क्या मुझे केवल उत्पाद दृश्य पृष्ठ को बाहर करना चाहिए page_cache? लेकिन मुझे ऐसा करने का कोई तरीका नहीं मिला?

जवाबों:


15

यह मुद्दा अभी भी 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"चेकआउट ब्लॉक के लिए सेट किए जाने के बाद से उत्पाद पृष्ठ को अस्वीकार्य नहीं किया जाना चाहिए , हालांकि यह ज्ञात समस्या के कारण अस्वीकार्य ब्लॉक कैश किया गया है । जब तक यह समस्या हल नहीं हो जाती, तब तक निम्न समाधान का उपयोग किया जा सकता है (मुझसे यह न पूछें कि यह काम क्यों करता है, यह एक लंबी कहानी है):

  1. के लिए जाओ \Magento\Framework\Pricing\Render\Layout::__construct
  2. बदलें ['cacheable' => $generalLayout->isCacheable()]करने के लिए['cacheable' => false]

इससे नुकसान नहीं होना चाहिए क्योंकि चेकआउट ब्लॉक को जोड़ने के बाद उत्पाद पृष्ठों को कैश नहीं किया जाएगा

एक अन्य प्रश्न यह है कि क्या आप वास्तव में बिल्ट-इन पेज कैश या वार्निश द्वारा उत्पाद पृष्ठों को गैर-परिवर्तनीय बनाना चाहते हैं?


1
नवीनतम Magento2 संस्करण पर इस मुद्दे के लिए कोई अद्यतन? @ एलेक्स
शाह

एलेक्स, मैं सिर्फ एक phtml कैश से निकालना चाहता हूं। और यह html फ़ाइल हेडर कंटेनर में कॉल करता है। किसी भी विचार कृपया मुझे बताएं
Camit1dk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.