ম্যাজেন্টো 2: ব্যাকএন্ড এবং ফ্রন্টএন্ড স্টেট / ক্যাশে সিঙ্ক করছে


14

ফ্রন্টএন্ডে ব্যাকএন্ড এবং স্থানীয় সঞ্চয়স্থানের মধ্যে রাষ্ট্র পরিচালনার জন্য ম্যাজেন্টো 2 এর কি কোনও সিস্টেম বা বিমূর্ততা রয়েছে?

আমি কোনও পুনর্নির্দেশ URL এর মাধ্যমে ব্যবহারকারীর পরিত্যক্ত কার্ট পুনরুদ্ধার করার জন্য একটি বৈশিষ্ট্য পোর্টিংয়ের কাজ করছি। সরলীকৃত ফর্মে, একটি ইউআরএল পছন্দ করে

http://magento.example.com/restore/the/cart?identifier=sdkfjh48v237g5

সনাক্তকারীর মধ্যে এনকোডড কোট_আইডির ভিত্তিতে বর্তমান ব্যবহারকারীর কার্টে একটি উদ্ধৃতি লোড করবে।

ম্যাজেন্টো 1-এ, এটি তুলনামূলকভাবে সহজ ছিল - আপনার কেবলমাত্র সঠিক উক্তি আইডি দিয়ে কোনও ব্যবহারকারীর চেকআউট সেশন তথ্য আপডেট করতে হবে। তবে ম্যাজেন্টো 2 স্থানীয় স্টোরেজের কব্জিতে যোগ করে

ম্যাজেন্টো 2 সামনের জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন (গুলি?) ব্রাউজারের স্থানীয় স্টোরেজ ডেটাবেজে তথ্য ক্যাশে করছে বলে মনে হচ্ছে। এর মধ্যে মিনি-কার্ট তৈরির তথ্য অন্তর্ভুক্ত রয়েছে। এর মানে কি end-user-প্রোগ্রামার (ME) ব্যাকএন্ড মধ্যে অধিবেশন সেশন আইডি পরিবর্তন করতে মিনি- ট্রলি এখনো প্রদর্শন করা হবে পরিচালনা এমনকি যদি হয় পুরাতন কার্টের ডেটা ।

এটি এমন একটি সমস্যার মাত্র একটি উদাহরণ যা ব্যাকএন্ড এবং সীমান্ত জুড়ে অ্যাপ্লিকেশন স্টেট পরিচালনা করার জন্য একটি একক এপিআই না জানার (বা থাকা) থেকে উদ্ভূত হয়। আমার নির্দিষ্ট সমস্যার জন্য আমি আমার শেষ পয়েন্টটি একটি HTML পৃষ্ঠা রেন্ডারিংয়ে পেয়েছি যাতে কিছু জাভাস্ক্রিপ্ট ম্যানুয়ালি স্থানীয় স্টোরেজ সাফ করে এবং তারপরে ব্যবহারকারীকে অন্য পৃষ্ঠায় পুনঃনির্দেশিত করে - তবে এটি মোটামুটি হ্যাকের মতো অনুভব করে।

ফ্রন্টএন্ড এবং ব্যাকএন্ডের মধ্যে ডেটা পরিচালনা করার জন্য কি ম্যাজেন্টো 2 তে একটি এপিআই রয়েছে?

পুরো সিস্টেমটি সংকেত দেওয়ার একটি আদর্শ উপায় আছে যে, ব্যাকএন্ড প্রসেসিংয়ের সময়, আপনি এমন কিছু করেছেন যা এটি প্রয়োজনীয় করে তোলে সীমান্তের স্থানীয় স্টোরেজ ক্যাশেটি বাতিল করে দেয়?

পৃষ্ঠাটিতে কোনও নতুন প্রয়োজনীয় জেএস মডিউল ইনজেক্ট করার কোনও কৌশল আছে যা স্বয়ংক্রিয়ভাবে সঞ্চালিত হয় এবং জাভাস্ক্রিপ্টের অন্যান্য অ্যাপ্লিকেশন (গুলি?) এর অ্যাক্সেসের আগে স্থানীয় স্টোরেজটি পরিচালনা করতে পারে?


আরে। প্রিয় অ্যালান স্টোর, আপনি উত্তর পেয়েছেন?
অমিত বেরা

পছন্দ করেছেন
অ্যালান ঝড় 19

উত্তর:


6

আমারও অনুরূপ সমস্যা ছিল: আমি চাইছিলাম মিনি-কার্টের উপাদানটি রিফ্রেশ করার পরে আমি একটি আইজ্যাক কার্ট যুক্ত করার জন্য একটি এজ্যাক্স অনুরোধ পাঠিয়েছি।

আপনি যদি কিছু পয়েন্ট কেবল মনে রাখেন তবে এটি আসলে বেশ সুন্দরভাবে কাজ করে:

  • আপনার মডিউলের ইত্যাদি / ফ্রন্টএন্ড / অংশ.এক্সএমএল এজেক্স কল করার পরে কোন পৃষ্ঠার বিভাগগুলি আপডেট করার প্রয়োজন তা ঘোষণা করুন।
  • আপনার অ্যাজাক্স অনুরোধটি প্রেরণ করতে jQuery.post () ব্যবহার করুন। এটি একটি পোষ্ট বা পুট অনুরোধ হতে পারে, কেবল পান না।
  • এবং এটি অবশ্যই জিকুয়েরির মাধ্যমেই হবে, প্রোটোটাইপ বা ভ্যানিলা জেএস নয়, কারণ এটি জিকুয়েরির 'আজাক্স কমপ্লিট' ইভেন্ট যা একটি অত্যাবশ্যক ভূমিকা পালন করে।
  • বেস-ইউআরএল দিয়ে অ্যাজাক্স ইউআরএল প্রিপেন্ড করুন (কেবল / দিয়ে শুরু করবেন না)

এখানে আমার বিভাগগুলি। Xml (xyz আমাদের গ্রাহকের নাম):

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
    <action name="xyz-ajax/cart/add">
        <section name="cart"/>
    </action>
</config>

এখানে 'xyz-ajax / cart / add' বিন্যাস অনুসারে '[ফ্রন্টনাম] / [অ্যাকশনপথ] / [অ্যাকশননাম]' ' এক্সএলএমএজএক্স কল "xyz-ajax / কার্ট / যোগ" শেষ হওয়ার পরে ম্যাজেন্টোকে 'কার্ট' আপডেট করতে বলে tells

এটি আমার টেম্পলেট (। Phtml) কোড:

<script type="text/javascript">
    require(['jquery', 'BigBridge_XYZ/option_selector'], function($, optionSelect) {
        optionSelect.create(<?= json_encode($componentData) ?>, $);
    })
</script>

এবং এটিই জেএস কোড যা আজাক্স অনুরোধটি প্রেরণ করে:

ফাংশন অনুরোধ কমপ্লিট (প্রতিক্রিয়াডাটা)}

$.post(baseUrl + 'xyz-ajax/cart/add/cf/' + configurableProductId + '/simple/' + item.simpleProductId + '/amount/' + item.amount, requestComplete);

প্রক্রিয়াতে কী ঘটে?

প্রতিবার আপনার স্ক্রিপ্ট jQuery এর মাধ্যমে সার্ভারে একটি অ্যাজাক্স পোস্ট (বা পুট) অনুরোধ প্রেরণ করে এবং এটি ফিরে আসে, jQuery একটি 'অজ্যাক্স কমপ্লিট' ইভেন্ট প্রেরণ করে। এই ইভেন্টটি মডিউল-গ্রাহক / ভিউ / ফ্রন্টএন্ড / ওয়েব / জেএস / গ্রাহক-ডেটা.জেএস-তে কোনও হ্যান্ডলার দ্বারা পরিচালিত হয়। এই হ্যান্ডলারটি পরীক্ষা করছে যে কোন পৃষ্ঠা-বিভাগগুলি আজাক্স কলের উপর নির্ভর করে (আপনার বিভাগগুলি x এক্সএমএল থেকে) এবং সেগুলি অবৈধ করে। এগুলি আপডেট করা হবে।

সূত্র:


14

ম্যাজেন্টো 2 ব্রাউজারে ব্যবহারকারীর সেশন ডেটা উপস্থাপন করতে গ্রাহক ডেটা জেএস এপিআই ব্যবহার করে। সমস্ত জেএস উইজেটগুলির গ্রাহক ডেটা জেএস এপিআই থেকে গ্রাহক ডেটা পুনরুদ্ধার করার কথা। গ্রাহক ডেটা বিভাগগুলিতে বিভক্ত (কার্ট, ইচ্ছামত তালিকা, ...)। প্রতিটি বিভাগটি পর্যবেক্ষণযোগ্য, সুতরাং এটি যখনই সংশোধন করা হবে তখন যে উইজেটটি এটি ব্যবহার করে তা পরিবর্তনটি প্রদর্শনের জন্য পুনরায় রেন্ডার করা হয়।

Magento কাঠামো পিএইচপি সেশন এবং জেএস স্থানীয় স্টোরেজ গ্রাহক ডেটা সিঙ্ক্রোনাইজেশনের জন্য দায়ী।

প্রতিবার সেশন আইডি কুকি এবং খালি লোকাল স্টোরেজ সহ কোনও দর্শনার্থী মাগেন্তো পৃষ্ঠাতে যান, গ্রাহকের ডেটা (সমস্ত বিভাগ) পুনরুদ্ধার করার জন্য সার্ভারের একটি HTTP অনুরোধ করা হয়।

প্রতিবার পরিদর্শনকারী কিছু স্টেট-মডিফাইং অপারেশন করেন (কার্টে যুক্ত করুন, ইচ্ছাশ্রেণীতে যোগ করুন), গ্রাহকের ডেটা সম্পর্কিত বিভাগ স্থানীয় স্টোরেজে অবৈধ হয় এবং আপডেট হওয়া বিভাগগুলি পুনরুদ্ধার করার জন্য আরেকটি এইচটিটিপি অনুরোধ করা হয়।

আপনি পোষ্ট ক্রিয়াকলাপগুলিকে স্থানীয় স্টোরেজ বিভাগগুলিতে লিঙ্ক করতে 'বিভাগ.xML' ব্যবহার করতে পারেন যা যখনই অ্যাকশন বলা হবে তখন তা অবৈধ হয়ে যাবে। দেখুন https://github.com/magento/magento2/blob/develop/app/code/Magento/Checkout/etc/frontend/sections.xml উদাহরণস্বরূপ।


2

এই অন্যান্য উত্তরের উপর ভিত্তি করে, আপনি যদি সাধারণ ম্যাজেন্টো require.jsফাইলগুলিতে এপিআই কলগুলির মাধ্যমে কার্টটি আপডেট করছেন তবে আপনি ajaxCompleteমিনিকার্টটি রিফ্রেশ করার জন্য jQuery পদ্ধতিতে নির্ভর করতে পারবেন না (অন্য একটি এজেএক্স অনুরোধের কাঠামো ব্যবহার করে?), আপনি Magento_Customer/js/customer-dataঅবজেক্টটির প্রয়োজন এবং জিজ্ঞাসা করতে পারেন এই উপায়টি রিফ্রেশ করার জন্য মিনিকার্টটিও:

<script>
    require([
        'Magento_Customer/js/customer-data'
    ], function (customerData) {
        var sections = ['cart'];
        customerData.invalidate(sections);
        customerData.reload(sections, true);
    });
</script>

সূত্র: https://github.com/magento/magento2/issues/5621

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.