ঠিক সেই বিভাগগুলি কি?
একটি বিভাগ হ'ল গ্রাহক উপাত্তগুলিকে একসাথে গ্রুপ করা। প্রতিটি বিভাগ কী দ্বারা উপস্থাপিত হয় যা ডেটা এবং ডেটা নিজেই অ্যাক্সেস এবং পরিচালনা করতে ব্যবহৃত হয়। ম্যাজেন্টো এজেএক্সের অনুরোধে বিভাগগুলি /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
পদ্ধতির ফলাফল হিসাবে প্রকৃত ডেটা সরবরাহ করে ।
কীভাবে বিভাগ আপডেটগুলি ট্রিগার করা হয়?
Magento ধরে নেয় যে গ্রাহকের ব্যক্তিগত তথ্য একটি গ্রাহক কিছু রাষ্ট্র সংশোধনের অনুরোধ পাঠায় যখন পরিবর্তিত হয় ( POST
, PUT
, DELETE
)। সার্ভারে লোড কমানোর জন্য, বিকাশকারীদের কোন ক্রিয়া (বা অনুরোধ) আপডেট করে কোন গ্রাহকের ডেটা বিভাগে তা আপডেট করে etc/section.xml
।
<action name="checkout/cart/add">
<section name="cart"/>
</action>
ক্রিয়া নাম একটি ক্রিয়া কী প্যাটার্ন। যখন কোনও ব্যবহারকারী নির্দিষ্ট পদক্ষেপের সাথে মেলে এমন ক্রিয়াকলাপে মেগ্যান্টো সনাক্ত করবে যে সংশ্লিষ্ট বিভাগটি পুরানো এবং এটি আবার লোড হয়। যদি অ্যাকশনের নামটি থাকে *
তার মানে এই যে প্রতিটি পোস্ট এবং পুট অনুরোধে বিভাগটি আপডেট করা হবে। যদি বিভাগ ট্যাগটি মিস হয় তবে সমস্ত বিভাগ আপডেট করা হবে।
সুতরাং ধারণাগতভাবে আপনি যখন কার্ট পৃষ্ঠা সমৃদ্ধ করবেন তখন মিনি কার্ট আপডেট করা ভুল। এই মুহুর্তে, মিনি কার্ট (বা কার্ট বিভাগ) ইতিমধ্যে আপডেট করা উচিত।
আপনি গ্রাহক ডেটা সম্পর্কে আরও তথ্য এখানে পেতে পারেন
অভ্যন্তরীণ বাস্তবায়ন
কখন এবং কীভাবে বিভাগগুলি আপডেট করা হয়েছে তা বোঝার জন্য আসুন বাস্তবায়নটি দেখুন। বোঝার মূল চাবিকাঠি ফাইল 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
। এর অর্থ হ'ল যখন কোনও ফর্ম সার্ভারে পোস্ট করা হয় (POST বা PUT পদ্ধতি সহ), বা যখন জাভাস্ক্রিপ্ট কোনও 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>
এইভাবে, একটি সার্ভার একটি ব্রাউজারে মার্জড বিভাগগুলির কনফিগারেশনটি পাস করে।
সুতরাং এই সমস্ত অনুমান করে, বিভাগটি কেবলমাত্র পোষ্ট বা পুট ফর্ম জমা দিয়ে বা এজেএক্স অনুরোধের মাধ্যমে আপডেট করা যেতে পারে
এছাড়াও, কেবল দুটি নোট রয়েছে:
- এখানে বর্ণিত সমস্ত হ'ল অভ্যন্তরীণ বাস্তবায়ন এবং পরিবর্তিত হতে পারে, সুতরাং আপনি নিরাপদে কেবল বিভাগ.এক্সএমএল ব্যবহার করতে পারেন এবং নির্দিষ্ট পোষ্ট বা পুট বা ডিলেট নিষ্ক্রিয় ক্রিয়াকলাপগুলি ট্রিগার করা হলে বিভাগ আপডেটগুলি আশা করতে পারেন।
- আপনি যদি নিশ্চিত হন তবে আপনাকে অবশ্যই কিছু বিভাগ আপডেট করার দরকার আছে আপনি সর্বদা এরকম কিছু করতে পারেন:
require('Magento_Customer/js/customer-data').reload(['cart'], false)