Đầu tiên, bạn xác định một yếu tố mới shippingAdditional
bằng cách tạo tệp view/frontend/layout/checkout_index_index.xml
như thế này
<?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>
Sau đó tạo tập tin view/frontend/web/js/view/checkout/shipping/carrier_custom.js
như thế này
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;
},
});
});
Và sau đó tạo một tập tin 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>
Về cơ bản, tệp XML yêu cầu thanh toán để bắt đầu tệp js là một uiComponent. Nó khởi tạo mẫu loại trực tiếp và sử dụngselectedMethod
chức năng để lấy giá trị của vận chuyển hiện được chọn (Carrier_method). Nếu giá trị là những gì bạn muốn, nó sẽ hiển thị khối. Bạn có thể sửa đổi nó theo nhu cầu của bạn, tức là. chỉ kiểm tra hãng đã chọn. Bởi vì selectedMethod
được định nghĩa vì knockout.computed()
nó sẽ được đánh giá lại mỗi khi người dùng thay đổi nhà mạng vì quote.shippingMethod()
có thể quan sát được.
tôi đã cập nhật vì đường dẫn mẫu bị sai