ก่อนอื่นให้คุณกำหนดองค์ประกอบใหม่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()
เป็นที่สังเกตได้
ฉันอัปเดตเนื่องจากเส้นทางแม่แบบไม่ถูกต้อง