Najpierw definiujesz nowy element shippingAdditional, tworząc view/frontend/layout/checkout_index_index.xmltaki 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.jsw 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 selectedMethodfunkcji, 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ż selectedMethodjest 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