ম্যাজেন্টো 2: অর্থ প্রদানের পদ্ধতি নির্বাচনের ইভেন্ট পর্যবেক্ষক


13

আমি একটি কাস্টম এক্সটেনশনে কাজ করছি যেখানে অগ্রণী চেকআউট পৃষ্ঠায় উপলব্ধ অর্থপ্রদানের পদ্ধতি তালিকা থেকে কোনও অর্থপ্রদানের পদ্ধতি নির্বাচন করা হলে আমাকে পর্যবেক্ষককে কল করতে হবে।

কেউ কি আমাকে বলতে পারবেন এর জন্য কোন ইভেন্ট পর্যবেক্ষককে ব্যবহার করা উচিত? আমার একটি কাস্টম ফাংশন কল করতে হবে এবং কার্টের সাবটোটেলে ফি যুক্ত করতে হবে।

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


10

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

যেহেতু ম্যাজেন্টো 2-তে চেকআউট প্রক্রিয়াটি বেশিরভাগ নকআউট জেএসের চারপাশে নির্মিত, বেশিরভাগ ক্রিয়া সার্ভার সাইড পিএইচপি পরিবর্তে জাভাস্ক্রিপ্ট ব্যবহার করে সীমান্তে ঘটে।

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

আপনার প্রকল্পটি দেখার জন্য একটি ভাল কোণ হ'ল পর্যবেক্ষকের পরিবর্তে একটি নিয়ামক ব্যবহার করা উচিত:

1. আসুন একটি মডিউল তৈরি করে শুরু করি ...

২. এমন একটি নিয়ামক তৈরি করুন যা ট্রিগার হওয়ার সাথে সাথে আপনার যুক্তিযুক্ত does

নিয়ামক কাঠামো: http://www.example.com/route/controller_folder/action

২.১ কন্ট্রোলার Actionক্লাস তৈরি করুন :

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল / কন্ট্রোলার / পরীক্ষা / Action.php

namespace NameSpace\Module\Controller\Test;

class Action extends \Magento\Framework\App\Action\Action
{
    public function execute()
    {
        $request = $this->getRequest();
        //EXECUTE YOUR LOGIC HERE
    }
}

২.২ আপনার নিয়ন্ত্রকদের জন্য একটি রুট রেজিস্টার করুন

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল, / etc / adminhtml / routes.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
  <router id="standard">
     <route id="route" frontName="route">
        <module name="NameSpace_Module" />
    </route>
  </router>
</config>

২.৩ যেহেতু এটি চেকআউটে ব্যবহৃত হবে, নিরাপদ ইউআরএল তালিকায় আপনার রুট যুক্ত করুন [সম্পাদনা]

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল, / etc / di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\Url\SecurityInfo">
        <arguments>
            <argument name="secureUrlList" xsi:type="array">
                <item name="route" xsi:type="string">/route/</item>
            </argument>
        </arguments>
    </type>
</config>

3. নিম্নলিখিত লেআউট ফাইলটি ব্যবহার করে চেকআউট পৃষ্ঠায় একটি জাভাস্ক্রিপ্ট ফাইল যুক্ত করুন:

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল / দৃশ্য / ফ্রন্টএন্ড / লেআউট / checkout_index_index.xml

<?xml version="1.0"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
    <head>
       <link src="NameSpace_Module::js/payment-method-trigger.js"/>
    </head>
</page>

৪. এই স্ক্রিপ্টে আপনি কেবলমাত্র যখনই কোনও পেমেন্ট পদ্ধতির ট্যাব ক্লিক করা হয়ে থাকে তখন এজ্যাক পোস্ট অনুরোধ প্রেরণের জন্য কোনও ফাংশন যুক্ত করতে পারেন।


সেরা পদ্ধতি - নকআউট: পর্যবেক্ষণে সাবস্ক্রাইব করা

মূল ফাইলটি প্রসারিত / ওভাররাইড না করে বা মূল ক্লিক ফাংশনটিকে প্রভাবিত না করে ক্লিক ইভেন্টটি ট্রিগার করার সেরা উপায়টি নকআউটের সাহায্যে একটি পর্যবেক্ষণযোগ্য সাবস্ক্রাইব করা জড়িত।

পদ্ধতি 2 - জেএস শ্রেণি প্রসারিত করুন [সম্পাদনা]

প্রাথমিক জেএস ক্লাস বাড়ানোর উপায়ও থাকতে হবে

define([
    'NameSpace_Module/path/to/original/file', //JS FILE TO EXTEND
], function (originalFile) { //PASS AS A PARAMETER
    'use strict';

    return originalFile.extend({ //EXTEND
        //FUNCTIONS ADDED HERE WILL OVERRIDE FUNCTIONS
        //FROM ORIGINAL CLASS IF ALREADY EXISTS
        someFunction: {
            someLogic();
        },


    });
});

পদ্ধতি 3 - ওভাররাইডিং নির্বাচন-প্রদান-পদ্ধতি.js

নকআউট জেএসের সাথে খেলা কখনও কখনও সূক্ষ্ম হতে পারে এবং এই উত্তরের উদ্দেশ্যে আমরা সিলেক্ট পেমেন্টমেথড ফাংশন দ্বারা চালিত উদ্ধৃতিতে অর্থ প্রদানের পদ্ধতিটি নিবন্ধকরণের জন্য দায়ী ফাংশনটি কেবল ওভাররাইড করব। এটি ১০০% নকআউট জেএস ব্যবহারের তুলনায় সর্বাধিক মার্জিত সমাধান নাও হতে পারে তবে ভবিষ্যতের ম্যাজেন্টো আপডেট মূল ফাংশনটি সংশোধন করে হস্তক্ষেপ না করে যদি এটি কোনও কার্যকারিতা প্রভাবিত না করে লক্ষ্য হিসাবে কাজ করা উচিত।

আরও ভালভাবে বুঝতে আপনি selectPaymentMethodএই ফাইলটির 139 লাইনটিতে ফাংশনটি খুঁজে পেতে পারেন :

Magento_Checkout / JS / দৃশ্য / পেমেন্ট / default.js

1. এখন আমাদের আমাদের ফাংশন ওভাররাইড ঘোষণা করতে হবে:

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল / দৃশ্য / ফ্রন্টএন্ড / requirejs-config.js

var config = {
    map: {
        '*': {
            'Magento_Checkout/js/action/select-payment-method':
                'NameSpace_Module/js/action/payment/select-payment-method'
        }
    }
};

২. অবশেষে, আমরা আমাদের এজ্যাক্স কল করতে কিছু যোগ করার সাথে অর্থ প্রদানের পদ্ধতিটি নির্বাচনের জন্য দায়ী ফাংশনটি পুনরায় ব্যবহার করি!

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল / দৃশ্য / ফ্রন্টএন্ড / ওয়েব / JS / কর্ম / পেমেন্ট / নির্বাচন পেমেন্ট-method.js

define(
    [
    'jquery',
    'uiComponent',
    'ko',
    'Magento_Checkout/js/model/quote',
    ], function ($, uiComponent, ko, quote) {
        'use strict';

        function () {
            $.ajax({
                showLoader: true,
                url: 'http://www.example.com/route/controller_folder/action',
                data: { action : 1, param : 2},
                type: "POST",
                dataType: 'json'
            }).done(function (data) {
                alert('Request Sent');
            });
        };

        return function (paymentMethod) {
            quote.paymentMethod(paymentMethod);
        }
});

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

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

চেকআউট সিস্টেমের সাথে ডিল করার সময় সর্বদা সতর্ক থাকার কথা মনে রাখবেন, চেকআউট পৃষ্ঠায় একটি বাগ একটি স্টোরটিকে খুব খারাপভাবে আঘাত করতে পারে।

দ্রষ্টব্য: উপরের সমস্ত কোড অচিহ্নিত


রিয়েল ভাল তথ্য
পান্ডুরং

5

প্রয়োজন

'Magento_Checkout/js/model/quote'

এবং পর্যবেক্ষণ

quote.paymentMethod.subscribe(function(){console.log('yay')}, null, 'change');

সেখানে পর্যবেক্ষণ করার মতো প্রচুর পরিমাণ রয়েছে

var billingAddress = ko.observable(null);
var shippingAddress = ko.observable(null);
var shippingMethod = ko.observable(null);
var paymentMethod = ko.observable(null);
var totals = ko.observable(totalsData);
var collectedTotals = ko.observable({})

1
ধন্যবাদ! দুর্দান্ত কাজ! অতিরিক্ত হিসাবে, আপনি যদি কোনও ফাংশনের ভিতরে অর্থ প্রদানের পদ্ধতিটি পরীক্ষা করতে চান তবে আপনি প্রথম যুক্তিটি ব্যবহার করতে পারেন , যেমন: quote.paymentMethod.subscribe(function(method){console.log(method);}, null, 'change');
সিয়ারে উচুখলেবাউ

0

এই 2 আপনি সেই অনুযায়ী চেষ্টা করতে পারেন

app/code/Magento/Payment/Model/Method/Adapter.php 
    payment_method_is_active
    $this->eventManager->dispatch(
        'payment_method_is_active',
        [
    'result' => $checkResult,
    'method_instance' => $this,
    'quote' => $quote
        ]);

Or 
    app/code/Magento/Payment/Model/Method/Adapter.php 
    payment_method_assign_data_
    $this->eventManager->dispatch(
        'payment_method_assign_data_' . $this->getCode(),
        [
    'method' => $this,
    'data' => $data
        ]);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.