ส่วนเหล่านั้นคืออะไร?
ส่วนคือส่วนของข้อมูลลูกค้าที่จัดกลุ่มเข้าด้วยกัน แต่ละส่วนจะถูกแทนด้วยคีย์ที่ใช้ในการเข้าถึงและจัดการข้อมูลและข้อมูลเอง วีโอไอพีโหลดส่วนโดยการร้องขอ AJAX เพื่อและแคชโหลดข้อมูลในการจัดเก็บในท้องถิ่นภายใต้เบราว์เซอร์ที่สำคัญ/customer/section/load/
mage-cache-storage
วีโอไอพีติดตามเมื่อมีการเปลี่ยนแปลงบางส่วนและโหลดส่วนที่อัพเดทโดยอัตโนมัติ
คุณจะกำหนดส่วนได้อย่างไร
ส่วนที่กำหนดไว้ในdi.xml
ไฟล์โดยการเพิ่มส่วนใหม่ลงในกลุ่มสระว่ายน้ำ
<type name="Magento\Customer\CustomerData\SectionPoolInterface">
<arguments>
<argument name="sectionSourceMap" xsi:type="array">
<item name="cart" xsi:type="string">Magento\Checkout\CustomerData\Cart</item>
<item name="directory-data" xsi:type="string">Magento\Checkout\CustomerData\DirectoryData</item>
</argument>
</arguments>
</type>
ดังนั้นที่นี่สองส่วนใหม่มีการลงทะเบียนและcart
และการดำเนินการและให้ข้อมูลที่แท้จริงเป็นผลมาจากวิธีการdirectory-data
Magento\Checkout\CustomerData\Cart
Magento\Checkout\CustomerData\DirectoryData
Magento\Customer\CustomerData\SectionSourceInterface
getSectionData
การอัพเดทส่วนจะถูกกระตุ้นอย่างไร
วีโอไอพีอนุมานว่าข้อมูลส่วนตัวของลูกค้าที่มีการเปลี่ยนแปลงเมื่อลูกค้าส่งคำขอการปรับเปลี่ยนบางส่วนของรัฐ ( POST
, PUT
, DELETE
) เพื่อลดภาระในเซิร์ฟเวอร์พัฒนาควรระบุว่าการดำเนินการ (หรือคำขอ) etc/section.xml
การปรับปรุงที่ส่วนข้อมูลของลูกค้าใน
<action name="checkout/cart/add">
<section name="cart"/>
</action>
ชื่อการดำเนินการเป็นรูปแบบคีย์การกระทำ เมื่อผู้ใช้เรียกร้องให้ดำเนินการที่ตรงกับรูปแบบที่ระบุวีโอไอพีจะตรวจพบว่าส่วนที่เกี่ยวข้องนั้นล้าสมัยแล้วและโหลดซ้ำอีกครั้ง หากชื่อการกระทำ*
หมายถึงส่วนนั้นจะได้รับการอัปเดตในคำขอ POST และ PUT แต่ละรายการ หากพลาดแท็กส่วนแล้วทุกส่วนจะได้รับการอัพเดต
ดังนั้นแนวคิดนี้ผิดที่จะอัปเดตรถเข็นขนาดเล็กเมื่อคุณรวยหน้าตะกร้า ณ จุดนี้ควรอัปเดตรถเข็นขนาดเล็ก (หรือส่วนรถเข็น) แล้ว
คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลลูกค้าได้ที่นี่
การใช้งานภายใน
หากต้องการทำความเข้าใจเกี่ยวกับการอัปเดตการใช้งานส่วนและเวลาและวิธี กุญแจสู่ความเข้าใจที่เป็นไฟล์และmagento2ce/app/code/Magento/Customer/view/frontend/web/js/section-config.js
magento2ce/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
ในตอนท้ายของคนสุดท้ายของทั้งสองเหตุการณ์ขนย้ายวัสดุมีการลงทะเบียนสำหรับการและajaxComplete
submit
ซึ่งหมายความว่าว่าเมื่อรูปแบบใด ๆ ที่โพสต์ (ที่มีการโพสต์หรือวิธีการ PUT) ไปยังเซิร์ฟเวอร์หรือเมื่อ JavaScript ส่งAJAX
, POST
หรือPUT
การร้องขอ, รถขนจะถูกเรียก ตัวจัดการทั้งสองมีตรรกะที่คล้ายกัน: ด้วยความช่วยเหลือของการMagento_Customer/js/section-config
ตรวจสอบควรเป็นส่วนใดส่วนหนึ่งได้รับการปรับปรุงหรือไม่ หากบางส่วนควรได้รับการอัพเดตcustomerData.invalidate(sections)
จะมีการเรียกใช้ และหลังจากนั้นส่วนที่ไม่ถูกต้องทั้งหมดจะถูกโหลดจากเซิร์ฟเวอร์
แล้วจะMagento_Customer/js/section-config
รู้ได้อย่างไรว่าควรจะลบส่วนใดและส่วนใดของการกระทำ คำตอบคือMagento/Customer/view/frontend/templates/js/section-config.phtml
:
<script type="text/x-magento-init">
<?php
/* @noEscape */ echo $this->helper(\Magento\Framework\Json\Helper\Data::class)->jsonEncode([
'*' => ['Magento_Customer/js/section-config' => [
'sections' => $block->getSections(),
'clientSideSections' => $block->getClientSideSections(),
'baseUrls' => array_unique([
$block->getUrl(null, ['_secure' => true]),
$block->getUrl(null, ['_secure' => false]),
]),
]],
]);
?>
</script>
ด้วยวิธีนี้เซิร์ฟเวอร์จะผ่านการกำหนดค่าส่วนที่ผสานไปยังเบราว์เซอร์
ดังนั้นสมมติว่าส่วนนั้นอาจได้รับการอัปเดตโดยแบบฟอร์ม POST หรือ PUT เท่านั้นที่ส่งหรือคำขอ AJAX
นอกจากนี้มีเพียงสองบันทึก:
- ทั้งหมดที่อธิบายไว้ที่นี่เป็นการใช้งานภายในและอาจมีการเปลี่ยนแปลงดังนั้นคุณสามารถใช้ส่วนได้อย่างปลอดภัยและคาดหวังว่าจะอัปเดตส่วนเมื่อมีการเรียกใช้การกระทำ POST หรือ PUT หรือ DELETE ที่ระบุ
- หากคุณแน่ใจว่าคุณต้องการอัปเดตบางส่วนคุณสามารถทำสิ่งนี้ได้ตลอดเวลา:
require('Magento_Customer/js/customer-data').reload(['cart'], false)