ปัญหานี้ยังคงมีอยู่ใน Magento 2.0.0 Stable
มีคุณสมบัติในการจัดการข้อยกเว้นวีโอไอพี 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"อยู่ การเพิ่มคุณสมบัตินี้จะไม่ทำให้บล็อกนี้โหลดโดย Ajax (ตามที่คาดไว้ในคำถาม) หากต้องการให้บางส่วนถูกโหลดโดย Ajax บล็อกนี้ควรประกาศคุณสมบัติ_isScopePrivateซึ่งตั้งค่าเป็นtrueยิ่งกว่านั้นไม่ควรมีบล็อกcacheable="false"อยู่ในหน้า ดู\Magento\PageCache\Observer\ProcessLayoutRenderElement::execute()และmage.pageCache._replacePlaceholder()เข้าวีโอไอพี / PageCache / view / ส่วนหน้า / เว็บ / js / หน้า cache.js ตรวจสอบเอกสารระดับสูงในโมดูลแคชของเพจ
สินค้าหน้าไม่ควรจะเป็นแคชตั้งแต่cacheable="false"การตั้งค่าสำหรับการเช็คเอาต์บล็อก แต่มันเป็นเนื่องจากปัญหาที่ทราบบล็อก uncacheable ถูกเก็บไว้ชั่วคราว จนกว่าปัญหานี้จะได้รับการแก้ไขอาจใช้วิธีแก้ปัญหาต่อไปนี้ (อย่าถามฉันว่าทำไมจึงใช้งานได้มันเป็นเรื่องยาว):
- ไปที่
\Magento\Framework\Pricing\Render\Layout::__construct
- เปลี่ยน
['cacheable' => $generalLayout->isCacheable()]เป็น['cacheable' => false]
สิ่งนี้ไม่ควรเป็นอันตรายเพราะหน้าผลิตภัณฑ์จะไม่ถูกแคชหลังจากเพิ่มบล็อกการชำระเงินแล้ว
คำถามอื่นคือคุณต้องการทำให้หน้าผลิตภัณฑ์ไม่สามารถแคชได้โดยแคชในตัวหรือวานิชหรือไม่?