Pertama, Anda mendefinisikan elemen baru shippingAdditional
dengan membuat file view/frontend/layout/checkout_index_index.xml
seperti ini
<?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>
Kemudian buat file view/frontend/web/js/view/checkout/shipping/carrier_custom.js
seperti ini
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;
},
});
});
Lalu buat file 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>
Pada dasarnya file XML memberitahu checkout untuk memulai file js yang merupakan komponen uiComponent. Ini memulai knockout template dan menggunakan selectedMethod
fungsi untuk mendapatkan nilai pengiriman yang dipilih saat ini (carrier_method). Jika nilainya adalah apa yang Anda inginkan maka akan muncul blok. Anda dapat memodifikasinya sesuai dengan kebutuhan Anda, yaitu. hanya memeriksa operator yang dipilih. Karena selectedMethod
didefinisikan karena knockout.computed()
akan dievaluasi kembali setiap kali pengguna mengubah operator karena quote.shippingMethod()
dapat diamati.
saya memperbarui karena jalur templat salah