วิธีแสดงบล็อกที่กำหนดเองในวิธีการจัดส่งให้เลือกใน Magento 2


15

ใช้ลิงค์อ้างอิงวิธีการเพิ่มบล็อกที่กำหนดเองที่วิธีการจัดส่งด้านล่างในการชำระเงินครั้งหน้า? ฉันสามารถสร้างบล็อคการขนส่งเพิ่มเติมได้ที่ด้านล่าง

แต่ฉันต้องการแสดงเนื้อหาเท่านั้นเมื่อเลือกวิธีการจัดส่ง เมื่อลูกค้าเลือกวิธีการจัดส่งเคอร์เซอร์ควรไปที่ข้อมูลเพิ่มเติมและฟิลด์ที่กำหนดเองและผู้ใช้ควรป้อนข้อมูล

เมื่อเราเลือกวิธีการจัดส่งแบบอื่นข้อมูลที่เกี่ยวข้องควรจะเกิดขึ้นถ้ามี Div อื่นควรซ่อนอยู่

เหมือนกับhttp://excellencemagentoblog.com/blog/2011/11/07/magento-advanced-shipping-method-development/ใน Magento 2 ฉันได้นำไปใช้ใน Magento 1

คำตอบ:


13

ก่อนอื่นให้คุณกำหนดองค์ประกอบใหม่shippingAdditionalโดยสร้างไฟล์view/frontend/layout/checkout_index_index.xmlแบบนี้

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.root">
            <arguments>
                <argument name="jsLayout" xsi:type="array">
                    <item name="components" xsi:type="array">
                        <item name="checkout" xsi:type="array">
                            <item name="children" xsi:type="array">
                                <item name="steps" xsi:type="array">
                                    <item name="children" xsi:type="array">
                                        <item name="shipping-step" xsi:type="array">
                                            <item name="children" xsi:type="array">
                                                <item name="shippingAddress" xsi:type="array">
                                                    <item name="children" xsi:type="array">
                                                        <item name="shippingAdditional" xsi:type="array">
                                                            <item name="component" xsi:type="string">uiComponent</item>
                                                            <item name="displayArea" xsi:type="string">shippingAdditional</item>
                                                            <item name="children" xsi:type="array">
                                                                <item name="carrier_custom" xsi:type="array">
                                                                    <item name="component" xsi:type="string">Vendor_Module/js/view/checkout/shipping/carrier_custom</item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

จากนั้นสร้างไฟล์view/frontend/web/js/view/checkout/shipping/carrier_custom.jsเช่นนี้

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

    return Component.extend({
        defaults: {
            template: 'Vendor_Module/checkout/shipping/carrier_custom'
        },

        initObservable: function () {

            this.selectedMethod = ko.computed(function() {
                var method = quote.shippingMethod();
                var selectedMethod = method != null ? method.carrier_code + '_' + method.method_code : null;
                return selectedMethod;
            }, this);

            return this;
        },
    });
});

จากนั้นสร้างไฟล์ view/frontend/web/template/checkout/shipping/carrier_custom.html

<div id="my-carrier-custom-block-wrapper" data-bind="visible: selectedMethod() == 'mycarrier_mymethod'">
    <p data-bind="i18n: 'This is custom block shown only when selected specific method'"></p>
</div>

โดยทั่วไปไฟล์ XML บอกการชำระเงินเพื่อเริ่มต้นไฟล์ js ซึ่งเป็น uiComponent มันเริ่มต้นเทมเพลตที่น่าพิศวงและใช้selectedMethodฟังก์ชั่นเพื่อรับค่าของการจัดส่งที่เลือกในปัจจุบัน (carrier_method) หากค่าเป็นสิ่งที่คุณต้องการมันจะแสดงบล็อก คุณสามารถปรับเปลี่ยนได้ตามความต้องการของคุณเช่น ตรวจสอบผู้ให้บริการที่เลือกเท่านั้น เนื่องจากselectedMethodมีการกำหนดเนื่องจากknockout.computed()จะได้รับการประเมินใหม่ทุกครั้งที่ผู้ใช้เปลี่ยนผู้ให้บริการเพราะquote.shippingMethod()เป็นที่สังเกตได้

ฉันอัปเดตเนื่องจากเส้นทางแม่แบบไม่ถูกต้อง


ฉันมีพื้นที่ข้อความในบล็อกที่กำหนดเอง วิธีบันทึกข้อมูลที่ป้อนใน textarea ไปยัง quote และ order
santhoshnsscoe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.