Z twojego pytania wynika, że chcesz zawsze mieć wybraną metodę wysyłki, gdy ktoś wejdzie na stronę kasy.
Aby to osiągnąć, musimy przesłonić javascript z modułu Magento_Checkout.
Po pierwsze, musimy stworzyć moduł:
Przestrzeń nazw / moduł / rejestracja.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
Przestrzeń nazw / moduł / etc / module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Namespace_Module" setup_version="1.0.0">
<sequence>
<module name="Magento_Checkout"/>
</sequence>
</module>
</config>
Następnie musimy utworzyć wymagane pliki do zastąpienia tego pliku.
Przestrzeń nazw / moduł / widok / frontend / Requjs-config.js
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
}
}
};
Teraz musimy skopiować checkout-data-resolver.js
z Magento_Checkout/view/frontend/web/js/model
naszego modułu tą samą ścieżkąNamespace_Module/view/frontend/web/js/model
Następnie musimy zmienić warunek wewnątrz funkcji resolveShippingRates: function (ratesData)
Od:
...
if (ratesData.length == 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Do:
...
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
I to wszystko, wszystko, co musisz teraz zrobić, to:
- Aktywuj moduł: moduł bin / magento: włącz moduł przestrzeni nazw
- Uruchom aktualizację instalacji: php bin / magento setup: aktualizacja
- Wykonaj wdrożenie statyczne: konfiguracja php bin / magento: zawartość statyczna: wdrożenie
selectShippingMethodAction(ratesData[0]);
downn nieco w metodzie, po tym jak szuka już wybranych metod, więc nie zastępuje ich.Uniemożliwi to wybranie innej opcji wysyłki. To rozwiązuje problem dla mnie:
źródło
Nie ma potrzeby, aby cały moduł osiągnął tę zmianę. Możesz po prostu rozszerzyć moduł kasy i zastąpić w swoim motywie.
Skopiuj plik js checkout-data-resolver.js
z
vendor\magento\module-checkout\view\frontend\web\js\model
do
app \ design \ frontend \ Namespace \ ThemeName \ Magento_Checkout \ web \ js \ model.
Znajdź wiersz z następującym kodem:
if (ratesData.length == 1) {
i zamień go na:
if (ratesData.length >= 1 && !selectedShippingRate) {
źródło
To, co prawdopodobnie chcesz zrobić, to domyślnie wybrać najtańszą metodę wysyłki.
W twoim module over drive checkout-data-resolver, opcjonalnie możesz zamiast tego użyć mixinu.
w metodzie resolShippingRates zmodyfikuj jak poniżej:
źródło
Podczas gdy powyższe metody sugerują przesłonięcie funkcji js, polecam użycie mixin, aby uniknąć niepotrzebnych kolizji kodu:
W swoim interfejsie wymagajjs-config.js dodaj następujące elementy:
W twoim Checkout-data-resolver.js
Możesz też pobrać moduł tutaj, który pozwala wybrać domyślną metodę wysyłki i płatności: Domyślna metoda wysyłki i płatności [M2]
źródło
Każdy, kto korzysta z narzędzia onestepcheckout, może spróbować:
Wiem, że to wygląda głupio, ale z jakiegoś powodu dodanie tego opóźnienia naprawdę mi pomogło. Koszt wysyłki sam się aktualizuje.
źródło