শিপিং ঠিকানার আগে বিলিং অ্যাড্রেসটি কীভাবে পুনরায় অর্ডার করতে হবে (সুইচ)


17

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

আমি এই কিভাবে করব? সম্ভবত এটির জন্য একটি প্লাগইন রয়েছে তবে আমি এখনও একটিটি খুঁজে পাইনি।

আমি একটি জার্মান শপটির স্ক্রিনশটটি এটির মতো করে সংযুক্ত করেছি:

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

আমি বিলিং ফর্মের জন্য .html টেম্পলেট ফাইলটি পেয়েছি এবং দেখে মনে হচ্ছে এটি এটি সেই জায়গা যেখানে এটি চেকআউট_ইন্ডেক্স_ইন্ডেক্স.এক্সএমএল এ শেষ হয়:

<item name="billing-step" xsi:type="array">
    <item name="component" xsi:type="string">uiComponent</item>
    <item name="sortOrder" xsi:type="string">2</item>
    <item name="children" xsi:type="array">
        <item name="payment" xsi:type="array">
            <item name="component" xsi:type="string">Magento_Checkout/js/view/payment</item>
            <item name="config" xsi:type="array">
                <item name="title" xsi:type="string" translate="true">Payment</item>
            </item>
            <item name="children" xsi:type="array">
                <!-- ... -->
                <!-- merge your payment methods here -->
                <item name="afterMethods" xsi:type="array">
                    <item name="component" xsi:type="string">uiComponent</item>
                    <item name="displayArea" xsi:type="string">afterMethods</item>
                    <item name="children" xsi:type="array">
                        <!-- merge additional data after payment methods here -->

<!-- I think here the billing form ends up -->

                    </item>
                </item>
            </item>
        </item>
    </item>
</item>

তবে এটি এখানে নির্দিষ্টভাবে স্থাপন করা হয়নি এবং আমি অন্য কোনও জায়গা খুঁজে পাচ্ছি না যেখানে এটি to জায়গায় সংক্রমণযুক্ত।


2
বিলিং ঠিকানা ফর্মটি ফাইলটিতে যুক্ত করা হয়েছে Magento/Checkout/Block/Checkout/LayoutProcessor.php
হারুন অ্যালেন

হ্যাঁ এটাই। সেখানে আমি কমপক্ষে পুনঃক্রম করতে পেরেছি। তবুও ঠিকানা যুক্তিকে স্যুইচ করতে হবে।
স্টেরোস

আপনি কাস্টম চেকআউট ব্যবহার করছেন?
অমিত বেড়া

Magento\Checkout\Block\Checkout\LayoutProcessorআমি যেমন ভাবছি তে ওভাররাইড এবং অবস্থান পরিবর্তন করা দরকার । নিশ্চিত নয়
অঙ্কিত শাহ

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

উত্তর:


11

হারুন নির্দেশ করে ফর্মটি যুক্ত করা হয়েছে Magento/Checkout/Block/Checkout/LayoutProcessor.php। এই তথ্যের সাহায্যে আমি প্লাগইন পরে একটি মডিউল তৈরি করেছি যা সেই প্রসেসরের উপর হুক করে:

app/code/<vendor>/<module>/Model/Checkout/LayoutProcessorPlugin.php

<?php

namespace <vendor>\ReorderBillingForm\Model\Checkout;

class LayoutProcessorPlugin
{

    /**
     * @param \Magento\Checkout\Block\Checkout\LayoutProcessor $subject
     * @param array $jsLayout
     * @return array
     */

    public function afterProcess(
        \Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
        array $jsLayout
    )
    {
        // get billing address form at billing step
        $billingAddressForm = $jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']['payment']['children']['afterMethods']['children']['billing-address-form'];

        // move address form to shipping step
        $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']['billing-address-form'] = $billingAddressForm;

        // remove form from billing step
        unset($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']['payment']['children']['afterMethods']['children']['billing-address-form']);

        return $jsLayout;
    }
}

app/code/<vendor>/<module>/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="<vendor>_<module>" setup_version="1.0.0"/>
</config>

app/code/<vendor>/<module>/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\Checkout\Block\Checkout\LayoutProcessor">
        <plugin name="reorder-billing-form"
                type="<vendor>\<module>\Model\Checkout\LayoutProcessorPlugin" sortOrder="<yourOrder>"/>
    </type>
</config>

app/code/<vendor>/<module>/registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    '<vendor>_<module>',
    __DIR__
);

এটি সফলভাবে বিলিং ঠিকানা ফর্মটিকে পুনরায় সাজিয়ে তোলে (এবং আশাকরি অন্যান্য ব্যক্তির জন্য কিছু মাথাব্যথা বাঁচায়)। তবে জাভাস্ক্রিপ্ট (?) এ এখনও প্রয়োজনীয় কাজ রয়েছে যা billing address is the same as shipping addressপ্রক্রিয়াটি পরিচালনা করে । এটি এখনও "স্ট্যান্ডার্ড" পথে কাজ করে।

অতিরিক্ত তথ্য:

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


নেমস্পেসের নামস্থান হওয়া উচিত নয় <vendor>\ReorderBillingForm\Block\Checkout;?
ফ্রাঙ্ক গ্রুট

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

আপনার উত্তর আপডেট করার জন্য ধন্যবাদ তবে আমি নিম্নলিখিত ত্রুটিটি Notice: Undefined index: billing-address-form in LayoutProcessorPlugin.php:20
ফ্রাঙ্ক গ্রুট

হুঁ আশ্চর্য, আমি তা পাই না। তবে আপনি কীভাবে ডিবাগিং করে $ jsLayout কাঠামোগত তা পরীক্ষা করতে পারেন। আমার বর্তমানে কোনও চলমান দৃষ্টান্ত নেই। আমি যদি আর একটি সেটআপ করি তবে সমস্যাটি কী হতে পারে তা জানার চেষ্টা করব।
স্টেরোস

আপনি ইতিমধ্যে উত্তর আপডেট করেছেন? আপনি এখনও প্রসেসের পরে ব্যবহার করছেন, প্রক্রিয়াটির চারপাশে নয় @ দারভেদা আমরা আপনার সমাধানটি ব্যবহার করছি তবে পেমেন্ট স্টেপটিতে বিলাইন অ্যাড্রেসটি এখনও উপস্থিত রয়েছে
অ্যালেক্স

0

ত্রুটি Undefined index: billing-address-formমধ্যে LayoutProcessorPlugin.phpঘটে আপনি চেকআউট সম্পত্তি আছে "প্রদর্শন বিলিং ঠিকানা উপর " থেকে "সেট পেমেন্ট পদ্ধতি " পরিবর্তে " পেমেন্ট পৃষ্ঠা "।

এর সাথে ঠিক করুন:

UPDATE core_config_data SET VALUE = 1 WHERE path = 'checkout/options/display_billing_address_on';

আমি দার্সভেদাস পোস্টে (উপরে দেখুন) একটি মন্তব্য হিসাবে এটি যুক্ত করতে পছন্দ করতাম তবে আমার কাছে অনুমতি আছে বলে মনে হয় না ...


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