কার্টে যোগ করার পরে কীভাবে একটি মিনিকার্ট আপডেট ট্রিগার করা যায়


10

আমার নীচের ক্লাসটি আমি কাস্টম উপায়ে কার্টে যুক্ত পরীক্ষা করতে ব্যবহার করছি;

use Magento\Framework\App\Action;
use Magento\Checkout\Model\Cart;

class Add extends Action\Action
{
    protected $cart;

    public function __construct(
        Action\Context $context,
        Cart $cart
    ){
        $this->cart = $cart;
        parent::__construct($context);
    }

    public function execute()
    {
        $this->cart->addProductsByIds([1])
            ->save();
    }
}

এটি দুর্দান্ত কাজ করে। আপনি যখন কার্টটি দেখেন তখন এটি আমার আইটেমটি দেখায়, ডাটাবেসগুলিতে সমস্ত দেখতে দুর্দান্ত লাগে However তবে, মিনিকার্ট এখনও দেখায় যেন ঝুড়ির কোনও আইটেম নেই।

আমি যদি সেই পণ্য বা তালিকার পৃষ্ঠাগুলির "কার্টে যুক্ত করুন" বোতামটি ব্যবহার করে কার্টে অন্য পণ্য যুক্ত করি তবে এটি কার্টে যুক্ত করে এবং উভয় আইটেম দেখানোর জন্য মাইনিকার্ট আপডেট করে।

এটি নিজেকে আপডেট করার জন্য মিনিকার্টটি কোথায় ট্রিগার করে বা মিনিকার্টটি কীভাবে জানতে পারে যে এটি রিফ্রেশ করা দরকার?

উত্তর:


36

আপনার সাহায্যের জন্য ধন্যবাদ :)

কীভাবে এটি ট্রিগার করতে হবে তা আমি খুঁজে পেয়েছি, sections.xmlআপনার মডিউলের একটি অভ্যন্তর ইত্যাদি / সম্মুখভাগ সেটআপ করতে হবে যা ম্যাগেন্তোকে জানিয়েছে যে প্রদত্ত আজাক্স কলটির জন্য কোন বিভাগগুলি আপডেট করতে হবে। এখানে একটি উদাহরণ;

<?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="[frontName]/[ActionPath]/[ActionName]">
        <section name="cart"/>
    </action>
</config>

আমার অ্যাজাক্স কলটি [frontName]/[ActionPath]/[ActionName]ম্যাজেন্টোতে শেষ হওয়ার পরে / গ্রাহক / বিভাগ / লোডে বিভাগগুলি পাস করে লোড করার জন্য আরও একটি কল করে।

ডিফল্টরূপে এটি কোনও বার্তার জন্য অনুরোধ করে তবে আপনি যদি আপনার বিভাগগুলি। এক্সএমএল সঠিকভাবে সেট আপ করেছেন তবে আপনি সেই বিভাগের নামগুলি সেখানেও সংজ্ঞায়িত করতে পারবেন।


@ স্মার্ট, ভাল তথ্য আমি এখান থেকে ক্লাব পেয়েছি
অমিত বেরা

দয়া করে সহায়তার জন্য magento.stackexchange.com/questions/166641/…
অঙ্কিত শাহ

দুর্দান্ত, আমি এজাক্সের মাধ্যমে অন্যান্য ব্লকগুলি আপডেট করার কাজ করছিলাম এবং এটি আমাকে পেয়েছে। আপনার সমাধান পোস্ট করার জন্য ধন্যবাদ।
এরিক

@ স্মার্টি কিছু ম্যাজেন্টো এপিআই কল করার পরে কার্ট বিভাগ আপডেট করার কোনও উপায় আছে?
এনডি

1
@ স্মার্টি একাধিক সংযোজন পণ্যের জন্য, এটি কেবলমাত্র প্রথম পণ্যটির পরিমাণ আপডেট করে এবং বাকি পণ্যের গণনা মিনি কার্টে দেখানো হয় না। আমরা কি এখানে আরও কিছু যুক্ত করতে চাই?
জোশি

6

এটি সরাসরি প্রশ্নের সাথে সম্পর্কিত নয়, তবে আপনি যদি সাধারণ ম্যাজেন্টো require.jsফাইলগুলিতে 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


সুতরাং আমি এখানে আমার কাস্টম পৃষ্ঠা_লআউটটির সমাধান খুঁজছি। আমার মিনি কার্টের গণনা সর্বদা 0 ছিল যখনই আমি আমার কোনও কাস্টম পৃষ্ঠায় যাই went আমি দৌড়াতে customerData.invalidate(sections);পেরেছি এবং তারপরে ম্যাজেন্টো বাকীটি করতে সক্ষম হয়েছিল।
জেমস হ্যারিংটন

2

স্টোরফ্রন্টে আপনি যদি মিনিকার্ট অঞ্চলে উত্সটিতে ডুব দেন

<div data-block="minicart" class="minicart-wrapper">
  <a class="action showcart" 
   data-bind="scope: 'minicart_content'">
     ... 
  </a>

   <script type="text/x-magento-init">
   {
    "[data-block='minicart']": {
        "Magento_Ui/js/core/app": {"components":{....}
     }
   }
</script>
</div>

আপনি এখানে দেখতে পাচ্ছেন magento2 স্ক্রিপ্ট ট্যাগের মধ্যে উপাদানগুলি কার্যকর করে এবং ডায়ামিক বাইন্ড ডেটা মিনিকার্ট ব্যবহারের নকআউটজেস ব্লক করতে

কিছু আকর্ষণীয় আমি আবিষ্কার করি

\vendor\magento\module-checkout\view\frontend\layout\default.xml

চেকআউট লেআউট থেকে। এটি componentমিনিটাকার্ট-সামগ্রীর জন্য গেটডাটা সংজ্ঞায়িত করে চালিয়ে যান Magento_Checkout/js/view/minicartআপনি দেখতে পাবেন

.....
$('[data-block="minicart"]').on('contentLoading', function(event) {
      addToCartCalls++;
      self.isLoading(true);
});
.....
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.