ปัญหานี้ยังคงมีอยู่ใน 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]
สิ่งนี้ไม่ควรเป็นอันตรายเพราะหน้าผลิตภัณฑ์จะไม่ถูกแคชหลังจากเพิ่มบล็อกการชำระเงินแล้ว
คำถามอื่นคือคุณต้องการทำให้หน้าผลิตภัณฑ์ไม่สามารถแคชได้โดยแคชในตัวหรือวานิชหรือไม่?