Najpierw definiujesz nowy element shippingAdditional
, tworząc view/frontend/layout/checkout_index_index.xml
taki plik
<?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>
Następnie utwórz plik view/frontend/web/js/view/checkout/shipping/carrier_custom.js
w ten sposób
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;
},
});
});
A następnie utwórz plik 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>
Zasadniczo plik XML informuje kasę o zainicjowaniu pliku js, który jest komponentem uiComponent. Inicjuje szablon nokaut i używa selectedMethod
funkcji, aby uzyskać wartość aktualnie wybranej wysyłki (metoda_przenośnika). Jeśli wartość jest taka, jaką chcesz, wyświetli blok. Możesz go zmodyfikować zgodnie ze swoimi potrzebami, tj. sprawdzanie tylko wybranego przewoźnika. Ponieważ selectedMethod
jest zdefiniowany, ponieważ knockout.computed()
będzie ponownie oceniany za każdym razem, gdy użytkownik zmieni przewoźnika, ponieważ quote.shippingMethod()
jest to obserwowalne.
zaktualizowałem, ponieważ ścieżka szablonu była nieprawidłowa