ম্যাজেন্টো 2-তে একাধিক শিপিংয়ের ক্ষেত্রে ডিফল্ট শিপিং পদ্ধতি কীভাবে সেট করবেন?


14

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

উত্তর:


22

আপনার প্রশ্নটি থেকে আমি বুঝতে পারি যে চেকআউট পৃষ্ঠায় যখন কেউ আসে তখন আপনি সর্বদা একটি শিপিং পদ্ধতি নির্বাচন করতে চান।

এটি অর্জনের জন্য, আমাদের Magento_Checkout মডিউল থেকে একটি জাভাস্ক্রিপ্ট ওভাররাইড করা প্রয়োজন।

প্রথম জিনিসগুলি, আমাদের একটি মডিউল তৈরি করতে হবে:

নামস্থান / মডিউল / registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Namespace_Module',
    __DIR__
);

নামস্থান / মডিউল, / etc / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Namespace_Module" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Checkout"/>
        </sequence>
    </module>
</config>

এর পরে, সেই জেএসকে ওভাররাইড করার জন্য আমাদের প্রয়োজনীয়তা তৈরি করতে হবে।

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

var config = {
    map: {
        '*': {
            'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
        }
    }
};

এখন আমাদের একই মডিউলটিতে আমাদের মডিউল checkout-data-resolver.jsথেকে অনুলিপি করতে হবেMagento_Checkout/view/frontend/web/js/modelNamespace_Module/view/frontend/web/js/model

এর পরে, আমাদের ফাংশনের ভিতরে একটি শর্ত পরিবর্তন করতে হবে resolveShippingRates: function (ratesData)

থেকে:

            ...

            if (ratesData.length == 1) {
                //set shipping rate if we have only one available shipping rate
                selectShippingMethodAction(ratesData[0]);

                return;
            }

            ...

প্রতি:

           ...

            if (ratesData.length >= 1) {
                //set shipping rate if we have only one available shipping rate
                selectShippingMethodAction(ratesData[0]);

                return;
            }

            ...

এবং এটি হ'ল, এখন আপনাকে যা করতে হবে তা হ'ল:

  • মডিউলটি সক্রিয় করুন: পিএইচপি বিন / ম্যাজেন্টো মডিউল: নেমস্পেস_মডিউল সক্ষম করুন
  • একটি সেটআপ আপগ্রেড চালান: পিএইচপি বিন / ম্যাজেন্টো সেটআপ: আপগ্রেড
  • একটি স্ট্যাটিক মোতায়েন করুন: পিএইচপি বিন / ম্যাজেন্টো সেটআপ: স্ট্যাটিক-সামগ্রী: স্থাপন করুন lo

যদি আমি কনফিগারেশনে বিকল্প সরবরাহ করতে চাই তবে কোন শিপিং পদ্ধতিটি নির্বাচন করা উচিত তবে তার জন্য কী ধরণের পরিবর্তনগুলি করা দরকার?
ভারতীয়

2
এটি সঠিকভাবে কাজ করছে না। আমরা ফর্মটি পূরণ করার পরে এটি কার্যকর হবে না এবং তারপরে যখন আমরা অন্যান্য শিপিং পদ্ধতিটি নির্বাচন করার চেষ্টা করি তখন আমরা এটি নির্বাচন করতে সক্ষম হই না। এটি স্বয়ংক্রিয়ভাবে আবার ডিফল্ট শিপিং পদ্ধতি নির্বাচন করবে।
ভারতীয়

1
আমি এটি সংশোধন করেছি এবং selectShippingMethodAction(ratesData[0]);ইতিমধ্যে নির্বাচিত পদ্ধতিগুলির সন্ধান করার পরে কলটি পদ্ধতিতে কিছুটা নিচে নামিয়েছে, যাতে এটি তাদের ওভাররাইড করে না।
thaddeusmt

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

এটি দুর্দান্ত কাজ করে, তবে আমি মিক্সিনগুলি ব্যবহার করার পরামর্শ দেব, সেগুলি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে কয়েকটি উত্তর স্ক্রোল করুন এবং তারপরে এই উত্তরটি থেকে লাইনগুলি ব্যবহার করুন;)
স্যানে

8
if (ratesData.length >= 1) {
  //set shipping rate if we have only one available shipping rate
  selectShippingMethodAction(ratesData[0]);

  return;
}

এটি অন্য কোনও শিপিং বিকল্প নির্বাচন করা অসম্ভব করে তুলবে। এটি আমার জন্য সমস্যাটি সমাধান করে:

if (ratesData.length == 1) {
    //set shipping rate if we have only one available shipping rate;
    selectShippingMethodAction(ratesData[0]);

    return;
}

if (ratesData.length >= 1) {
    //set shipping rate if we have only one available shipping rate
    if(!selectedShippingRate) {
        selectShippingMethodAction(ratesData[0]);
    }
}

এটি কোন ফাইলটিতে?
এরফান

@ বেঞ্জামিন, এটি ভাল কাজ করছে। কিন্ত স্টেস্টেচেকআউট ব্যবহার করার সময় আমরা কীভাবে অর্ডারটিকে মোটামুটি আপডেট করতে পারি? মনে হচ্ছে শিপিং পদ্ধতিতে ম্যানুয়ালি ক্লিক করলে অর্ডারে মোট শিপিংয়ের ব্যয়টি আপডেট হয়।
ম্যাজেন্টো লার্নার

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
Tailtiu

5

এই পরিবর্তনটি অর্জন করতে পুরো মডিউলটির প্রয়োজন নেই। আপনি চেকআউট মডিউলটি সহজভাবে প্রসারিত করতে এবং আপনার থিমটিতে ওভাররাইড করতে পারেন।

  1. JS ফাইল চেকআউট-ডেটা-resolver.js কপি
    থেকে
    vendor\magento\module-checkout\view\frontend\web\js\model
    থেকে
    অ্যাপ্লিকেশন \ নকশা \ ফ্রন্টএন্ড \ নামস্থান \ THEMENAME \ Magento_Checkout \ ওয়েব \ JS \ মডেল।

  2. নিম্নলিখিত কোড সহ লাইনটি সনাক্ত করুন:
    if (ratesData.length == 1) {
    এবং এর সাথে প্রতিস্থাপন করুন:
    if (ratesData.length >= 1 && !selectedShippingRate) {


1
গ্রাহকের যদি ডিফল্ট শিপিং ঠিকানা চেকআউট পৃষ্ঠায় প্রাক-জনবহুল থাকে বা জিপ কোডটি কার্ট পৃষ্ঠায় প্রিপোপুলেটেড থাকে তবে মানগুলি ধরে রাখতে পারে না? এই ক্ষেত্রে মানগুলি ধরে রাখার কোনও উপায় আছে কি?
সাহানা

এটা ভাল কাজ করছে। তবে আমরা সংক্ষিপ্তসারটি আপডেট করার সাথে সাথে শিপিংয়ের পরিমাণ কীভাবে পেতে পারি? মনে হচ্ছে শিপিংয়ের পদ্ধতিটিতে ম্যানুয়ালি ক্লিক করলেই অর্ডার সংক্ষিপ্তরে শিপিংয়ের
ব্যয়টি

ভাল কাজ করার জন্য ধন্যবাদ
তীর্থ প্যাটেল

2

আপনি সম্ভবত যা করতে চান তা হ'ল ডিফল্ট দ্বারা সস্তার শিপিং পদ্ধতিটি নির্বাচন করুন।

রাইড চেকআউট-ডেটা-রিসলভারের ওপরে আপনার মডিউলে, বিকল্প হিসাবে আপনি পরিবর্তে একটি মিশিন ব্যবহার করতে সক্ষম হতে পারেন।

var config = {
    map: {
        '*': {
            'Magento_Checkout/js/model/checkout-data-resolver':'MyModule_Checkout/js/view/checkout-data-resolver'
        }
    }
}

রেজোলিউশন রেট পদ্ধতিতে নীচের মত পরিবর্তন করুন:

        /**
         * @param {Object} ratesData
         */
        resolveShippingRates: function (ratesData) {
            var selectedShippingRate = checkoutData.getSelectedShippingRate(),
                availableRate = false;
            //Added to find the cheapest rate
            var lowestRateId = _.min(_.keys(ratesData), function(k) { return ratesData[k].amount; });

            if (ratesData.length === 1) {
                //set shipping rate if we have only one available shipping rate
                selectShippingMethodAction(ratesData[0]);

                return;
            }

            // added to select the cheapest rate if no method selected

            if(lowestRateId && !selectedShippingRate && ratesData.length > 0) {
                selectShippingMethodAction(ratesData[lowestRateId]);
            }

এটা ভাল কাজ করছে। তবে আমরা সংক্ষিপ্তসারটি আপডেট করার সাথে সাথে শিপিংয়ের পরিমাণ কীভাবে পেতে পারি? মনে হচ্ছে শিপিংয়ের পদ্ধতিটিতে ম্যানুয়ালি ক্লিক করলেই অর্ডার সংক্ষিপ্তরে শিপিংয়ের
ব্যয়টি

আপনি কি এই সমস্যার সমাধান পেয়েছেন?
ব্যবহারকারী00247

পছন্দ করেছেন আপনার যদি সমাধান হয় তবে শেয়ার করুন
ম্যাজেন্টো লার্নার

@ ম্যাজেন্টোলিয়ারার আমিও একটি সমাধান
খুঁজছি

2

উপরের পদ্ধতিগুলি js ফাংশনগুলিকে ওভাররাইড করার পরামর্শ দিলে আমি অপ্রয়োজনীয় কোড সংঘর্ষ এড়াতে মিক্সিন ব্যবহার করার পরামর্শ দিচ্ছি:

আপনার সম্মুখভাগে jjs-config.js এ নিম্নলিখিতগুলি যুক্ত করুন:

var config = {
    config: {
        mixins: {
            'Magento_Checkout/js/model/checkout-data-resolver': {
                '{Vendor}/{Module}/model/checkout-data-resolver': true
            }
        }
    }
};

আপনার চেকআউট-ডেটা-রিসলভার.জেএস-এ

define([
    'underscore',
    'mage/utils/wrapper',
    'Magento_Checkout/js/checkout-data',
    'Magento_Checkout/js/action/select-shipping-method',
    'Magento_Checkout/js/action/select-payment-method'
],function (_, wrapper, checkoutData, selectShippingMethodAction) {
    'use strict';

    return function (checkoutDataResolver) {

        var resolveShippingRates = wrapper.wrap(
            checkoutDataResolver.resolveShippingRates,
            function (originalResolveShippingRates, ratesData) {
                // select your shipping method here using the ratesData and selectShippingMethodAction
                return originalResolveShippingRates(ratesData);
            }
        );

        return _.extend(checkoutDataResolver, {
            resolveShippingRates: resolveShippingRates
        });
    };
});

বিকল্পভাবে, আপনি এখানে মডিউলটি ডাউনলোড করতে পারেন যা আপনাকে ডিফল্ট শিপিং এবং প্রদানের পদ্ধতি নির্বাচন করতে দেয়: ডিফল্ট শিপিং এবং অর্থ প্রদানের পদ্ধতি [এম 2]


0

যে কেউ এই স্টেপচেকআউট ব্যবহার করছে সে চেষ্টা করতে পারে:

if (ratesData.length >= 1) {
  setTimeout(function(){
     selectShippingMethodAction(ratesData[0]);
  }, 500)
  return;
}

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

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