ম্যাজেন্টো 2 চেকআউট - শিপিং ঠিকানা এবং শিপিং পদ্ধতির মধ্যে একটি কাস্টম ক্ষেত্র যুক্ত করুন


21

আমি শিপিং ঠিকানা এবং শিপিং পদ্ধতি বিভাগগুলির মধ্যে একটি কাস্টম ক্ষেত্র যুক্ত করার চেষ্টা করছি । এবং আমি এই ক্ষেত্রের মানগুলি শেষ পর্যন্ত উভয় quoteএবং sales_orderসারণীতে সংরক্ষণ করতে চাই । এটি একটি "অর্ডার মন্তব্য" ক্ষেত্র যুক্ত করার অনুরূপ তবে এই ক্ষেত্রটি শিপিং ঠিকানা বিভাগের পরে এবং শিপিং পদ্ধতি বিভাগের ঠিক আগে উপস্থিত হওয়া উচিত।

আমি চেকআউটটিতে একটি কাস্টম ক্ষেত্র এবং একটি কাস্টম ফর্ম কীভাবে যুক্ত করতে পারি সে সম্পর্কে ম্যাগান্টো ডেভ গাইডগুলির মধ্য দিয়ে গিয়েছিলাম এবং একটি নির্দিষ্ট পরিমাণে একটি সমাধান বাস্তবায়ন করেছি।

আমি এ পর্যন্ত যা করেছি:

  1. checkout_index_index.xmlলেআউটটি আপডেট করেছে , uiComponent"শিপিংএড্রেস" আইটেমের অধীনে একটি নতুন (একটি ধারক) যুক্ত হয়েছে।
  2. ধারকটির ভিতরে আমার প্রয়োজনীয় উপাদান (ক্ষেত্র) যুক্ত হয়েছে।
  3. /js/view/shipping.jsshipping.phtmlআমার কাস্টম মডিউলে ওভাররাইড করুন ।
  4. shipping.phtmlচেকআউট শিপিং ঠিকানা এবং শিপিং পদ্ধতির (উপরে একটি নতুন স্ট্যাটিক ফর্ম যোগ করার অনুরূপ কিছু) এর মধ্যে ভিতরে তৈরি কন্টেইনারটিকে অনুরোধ করল

এখন আমি যে ফিল্ডটি চাই তা অনপেজ চেকআউটে ঠিক যেখানে চাই সেখানে রেন্ডার করা হচ্ছে। তবে আমি নীচের সমস্যার সাথে মিলিত হয়েছি।

  1. আমি উপরে যে কাস্টম ক্ষেত্রটির মূল্য যুক্ত করেছি তাতে কীভাবে অ্যাক্সেস করবেন? আমি একটি শিপিংএড্রেস এক্সটেনশন অ্যাট্রিবিউটে মানটি সংরক্ষণ করার চেষ্টা করছি। আমি setShippingInformationActionভিতরে একটি মিশ্রণ যুক্ত করেছি যা নীচেরটি করার চেষ্টা করুন

    shippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];

কিন্তু উপরের কোডটি আসলে ব্যর্থ হয় যেহেতু উপাদানটি নেই shipping-address-fieldset। আমি windowউপাদানটির মাধ্যমে মান পেতে সক্ষম হতে পারি । তবে কি ম্যাজেন্টোর মাধ্যমে এটি অ্যাক্সেস করার কোনও উপায় আছে?

  1. স্থানীয় ক্যাশে স্টোরেজে এই উপাদানটির মান সংরক্ষণ করার কোনও উপায় আছে ( Magento_Checkout/js/checkout-data) সুতরাং কোনও পৃষ্ঠা রিফ্রেশ করার পরেও মানটি বহাল থাকবে?

2
এটিকে একবার দেখুন - magento.stackexchange.com/questions/135969/…
igloczek

দয়া করে নীচের লিঙ্কটি উল্লেখ করুন আমি আশা করি এটি আপনাকে magento.stackexchange.com/questions/187847/…
প্রদীপ কুমার

উত্তর:


1

আপনার প্রশ্নের ভিত্তিতে আমি অনুমানের আওতায় আছি যে আপনি ইতিমধ্যে আপনার এক্সটেনশন বৈশিষ্ট্যগুলি সেট আপ করেছেন। আমি অনুরূপ পরিবর্তন করেছি এবং আশা করি আমার উত্তরটি সহায়তা করবে helps

আপনার কাস্টম মডিউলে ডিফল্ট শিপিং প্রসেসর / ডিফল্ট প্রসারিত করতে একটি প্রয়োজনীয় js-config ফাইল তৈরি করুন

নামস্থান / CustomModule / দৃশ্য / ফ্রন্টএন্ড / requirejs-config.js
var কনফিগারেশন =
    "মানচিত্র": {
        "*":
            'ম্যাজেন্টো_চেকআউট / জেএস / মডেল / শিপিং-সেভ-প্রসেসর / ডিফল্ট': 'নেমস্পেস_কাস্টমমডিউল / জেএস / মডেল / শিপিং-সেভ-প্রসেসর / ডিফল্ট'
        }
    }
};

পেডলোডে আপনার এক্সটেনশন বৈশিষ্ট্য যুক্ত করুন।

/ * গ্লোবাল সংজ্ঞা, সতর্কতা * /
সংজ্ঞায়িত (
    [
        'JQuery',
        'কো',
        'Magento_Checkout / JS / মডেল / উদ্ধৃতি',
        'Magento_Checkout / JS / মডেল / রিসোর্স-URL-ব্যবস্থাপক',
        'পুরোনো যাদুকর / স্টোরেজ',
        'Magento_Checkout / JS / মডেল / অর্থপ্রদান-সার্ভিস',
        'Magento_Checkout / JS / মডেল / পেমেন্ট / পদ্ধতি-কনভার্টার',
        'Magento_Checkout / JS / মডেল / ত্রুটি প্রসেসর',
        'Magento_Checkout / JS / মডেল / পূর্ণ স্ক্রীন-লোডার',
        'Magento_Checkout / JS / কর্ম / নির্বাচন-বিলিং-ঠিকানা'
    ],
    ফাংশন (
        $,
        কো,
        কোট,
        resourceUrlManager,
        স্টোরেজ,
        paymentService,
        methodConverter,
        errorProcessor,
        fullScreenLoader,
        selectBillingAddressAction
    ) {
        'কঠোর ব্যবহার';

        ফিরে
            saveShippingInifications: ফাংশন () {
                var payload;

                যদি (! quote.billingAddress ()) {
                    selectBillingAddressAction (quote.shippingAddress ());
                }
                // আপনার শিপিং ঠিকানায় এক্সটেনশন বৈশিষ্ট্য যুক্ত করা
                পেডলোড = {
                    ঠিকানার তথ্য: {
                        শিপিং_এড্রেস: উদ্ধৃতি। শপিং অ্যাড্রেস (),
                        বিলিং_এড্রেস: কোট.বিলিংএড্রেস (),
                        শিপিং_মোথড_কোড: উদ্ধৃতি.শীপিংমঠোড ()। পদ্ধতি_ কোড,
                        শিপিং_কারিয়ার_কোড: উদ্ধৃতি.শীপিংমঠোড ()। ক্যারিয়ার_কোড,
                        extension_attributes: {
                            কাস্টম_ফিল্ড: $ ('# কাস্টম_ফিল্ড')। ভাল (), 
                        }
                    }
                };

                fullScreenLoader.startLoader ();

                রিটার্ন স্টোরেজ.পোস্ট (
                    resourceUrlManager.getUrlForSetShippingInformation (উদ্ধৃতি),
                    JSON.stringify (পে লোড)
                ).সম্পন্ন(
                    ফাংশন (প্রতিক্রিয়া) {
                        quote.setTotals (response.totals);
                        paymentService.setPaymentMethods (methodConverter (response.payment_methods));
                        fullScreenLoader.stopLoader ();
                    }
                ) .Fail (
                    ফাংশন (প্রতিক্রিয়া) {
                        errorProcessor.process (প্রতিক্রিয়া);
                        fullScreenLoader.stopLoader ();
                    }
                );
            }
        };
    }
);

একটি প্লাগইন দিয়ে আপনার উদ্ধৃতিতে অ্যাট্রিবিউটটি সংরক্ষণ করুন (আপনি যদি এখানে কোনও পর্যবেক্ষক ব্যবহার করতে পারেন তবে আমি যাচাই করেছিলাম না নিশ্চিত না)।

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\Checkout\Model\ShippingInformationManagement">
        <plugin name="Namespace_CustomModule_save_delivery_date_in_quote" type="Namespace\CustomModule\Plugin\Checkout\SaveAddressInformation" />
    </type>

</config>

SaveAddressInformation.php

ক্লাস SaveAddressInformation
{
    সুরক্ষিত ote কোটরেপোসিটোরি;
    পাবলিক ফাংশন __ কনস্ট্রাক্ট (
        \ ম্যাজেন্টো ote উক্তি \ মডেল \ কোয়েট রেপোসিটরি $ উদ্ধৃতিপোষক
    ) {
        $ এটি-> উদ্ধৃতিপরিবর্তন = $ উদ্ধৃতিপরিষদ;
    }
    / **
     * @ পরিম \ ম্যাজেন্টো \ চেকআউট \ মডেল \ শিপিংইনফরমেশন ম্যানেজমেন্ট $ বিষয়
     * @ পরিম $ কার্টআইডি
     * @ পরিম \ ম্যাজেন্টো \ চেকআউট \ এপিআই \ ডেটা \ শিপিংইনফর্মেশন ইন্টারফেস $ ঠিকানা তথ্য
     * /
    সেভ অ্যাড্রেস ইনফরমেশন (পূর্বে জনসাধারণের কাজ)
        \ ম্যাজেন্টো \ চেকআউট \ মডেল \ শিপিংআইফরমেশন ম্যানেজমেন্ট $ বিষয়,
        $ CartId,
        \ ম্যাজেন্টো \ চেকআউট \ এপিআই \ ডেটা \ শিপিংইনফর্মেশন ইন্টারফেস $ ঠিকানা তথ্য
    ) {
        $ এক্সটেনশনএট্রিবিউটস = $ ঠিকানা ইনফরমেশন-> getExistanceAttributes ();
        $ কাস্টমফিল্ড = $ এক্সটেনশনএট্রিবিউটস-> getCustomField ();
        $ উদ্ধৃতি = $ এটি-> উদ্ধৃতিআপনি-> getActive ($ কার্টআইডি);
        $ Quote-> setCustomField ($ customField);

    }
}

একটি পর্যবেক্ষক ইভেন্ট.এক্সএমএল দিয়ে আপনার অর্ডারে অ্যাট্রিবিউট সংরক্ষণ করুন

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="sales_model_service_quote_submit_before">
        <observer name="unique_observer_name" instance="Namespace\CustomModule\Observer\SaveCustomFieldToOrder"/>
    </event>
</config>

SaveCustomFieldToOrder.php

ক্লাস SaveCustomFieldToOrder অবজারভারইন্টারফেস প্রয়োগ করে
{
    / **
     * @var \ Magento \ ফ্রেমওয়ার্ক \ অবজেক্টম্যানেজারইন্টারফেস
     * /
    সুরক্ষিত ob _জবসটি ম্যানেজার;

    / **
     * @ পরিম \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অবজেক্টম্যানেজারইন্টারফেস $ অবজেক্টম্যানেজার
     * /
    পাবলিক ফাংশন __ কনস্ট্রাক্ট (\ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অবজেক্টম্যানেজারইন্টারফেস $ অবজেক্টম্যানেজার)
    {
        $ এটি -> _ অবজেক্ট ম্যানেজার = $ অবজেক্টম্যানেজার;
    }

    পাবলিক ফাংশন এক্সিকিউট (ইভেন্টObserver $ পর্যবেক্ষক)
    {
        $ অর্ডার = $ পর্যবেক্ষক-> getOrder ();
        ote quoteRepository = $ এটি -> _ অবজেক্ট ম্যানেজার-> তৈরি করুন ('ম্যাজেন্টো \ উদ্ধৃতি \ মডেল \ উদ্ধৃতিপোষক');
        / ** @var \ Magento \ উক্তি \ মডেল \ উক্তি $ উদ্ধৃতি * /
        $ উদ্ধৃতি = ote উদ্ধৃতিআপনি-> পান ($ অর্ডার-> getQuoteId ());
        $ অর্ডার-> সেটকাস্টমফিল্ড (ote উদ্ধৃতি-> getCustomField ());

        প্রত্যাবর্তন $ এটি;
    }
}


ওভাররাইডিং মূল পদ্ধতিগুলি খুব ভাগ্যবান নয়। যদি অন্য কোনও মডিউল আপনার ওভাররাইড করে? magento.stackexchange.com
১1৩৯

ভাল কথা, বিকল্প পদ্ধতি সম্পর্কে সচেতন ছিল না। এটা ইশারা জন্য ধন্যবাদ.
নাথানিয়েল

@ vaso123 দেখে মনে হচ্ছে যে আমিও কিছু সম্পর্কে সচেতন নই কারণ এখানে নাথানিয়েল একটি প্লাগইন তৈরি করেছেন এবং একটি ইভেন্ট-পর্যবেক্ষক তৈরি করেছেন যাতে কোন মূল ফাংশনটি এখানে অতিক্রম করা হয়। আপনি যদি দয়া করে এটি আরও কিছুটা ব্যাখ্যা করতে পারেন তবে এটি সত্যই সহায়ক হবে ... ধন্যবাদ
সর্বজ্ঞ

@ সরবগ্যা যখন আপনি ব্যবহার করেন তখন জেএস প্রয়োজন হয় map *, ব্যবহার করবেন না , পরিবর্তে মিক্সিন ব্যবহার করুন।
vaso123

@ ভাসো ১২৩৩ আমি বিশ্বাস করি তিনি ম্যাজেন্টো_চেকআউট / জেএস / মডেল / শিপিং-সেভ-প্রসেসর / ডিফল্টকে উল্লেখ করছেন: 'নেমস্পেস_কাস্টমমডুল / জেএস / মডেল / শিপিং-সেভ-প্রসেসর / ডিফল্ট' যা আইআই বুঝতে পেরে ম্যাজেন্টো_চেকআউট / জেএস / মডেল / শিপিংয়ের স্থলাভিষিক্ত হয় -save প্রসেসর / ডিফল্ট। this কিছুক্ষণ হয়ে গেছে যখন আমি এটি লিখেছিলাম তাই সর্বজ্ঞ দয়া করে ভুল করে থাকলে আমাকে সংশোধন করুন।
নাথানিয়েল

0

এই \Magento\Checkout\Block\Checkout\LayoutProcessor::processপদ্ধতির জন্য একটি প্লাগইন তৈরি করুন ।

এই পথে di.xML এ প্রবেশ করুন

app/code/CompanyName/Module/etc/frontend/di.xml

এই ডিরেক্টরিতে প্লাগইন ক্লাস তৈরি করুন।

app/code/CompanyName\Module\Model\Plugin\Checkout

2 => এই ডিরেক্টরিতে প্লাগইন ক্লাস তৈরি করুন। app/code/CompanyName\Module\Model\Plugin\Checkout

    $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
    ['shippingAddress']['children']['shipping-address-fieldset']['children']['custom_field'] = [
        'component' => 'Magento_Ui/js/form/element/abstract',
        'config' => [
            'customScope' => 'shippingAddress.custom_attributes',
            'template' => 'ui/form/field',
            'elementTmpl' => 'ui/form/element/input',
            'options' => [],
            'id' => 'custom-field'
        ],
        'dataScope' => 'shippingAddress.custom_attributes.custom_field',
        'label' => 'Custom Field',
        'provider' => 'checkoutProvider',
        'visible' => true,
        'validation' => [],
        'sortOrder' => 250,
        'id' => 'custom-field'
    ];


    return $jsLayout;
}

}

এটি হয়ে গেলে, চেকআউট পৃষ্ঠাটি দেখুন।

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