Wie ich aus Ihrer Frage verstanden habe, möchten Sie immer eine Versandart auswählen, wenn jemand auf die Checkout-Seite kommt.
Um dies zu erreichen, müssen wir ein Javascript aus dem Magento_Checkout-Modul überschreiben.
Zuerst müssen wir ein Modul erstellen:
Namespace / Module / register.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
Namespace / Module / 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>
Danach müssen wir die requirejs erstellen, um diese js zu überschreiben.
Namespace / Module / view / frontend / requirejs-config.js
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
}
}
};
Jetzt müssen wir kopieren checkout-data-resolver.js
von Magento_Checkout/view/frontend/web/js/model
in unserem Modul mit dem gleichen PfadNamespace_Module/view/frontend/web/js/model
Danach müssen wir eine Bedingung innerhalb der Funktion ändern resolveShippingRates: function (ratesData)
Von:
...
if (ratesData.length == 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Zu:
...
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Und das ist alles, was Sie jetzt tun müssen, ist:
- Aktivieren Sie das Modul: php bin / magento module: enable Namespace_Module
- Führen Sie ein Setup-Upgrade durch: PHP Bin / Magento Setup: Upgrade
- Führen Sie eine statische Bereitstellung durch: php bin / magento setup: static-content: deploy
selectShippingMethodAction(ratesData[0]);
hinzugefügt, um in der Methode etwas niedriger zu sein, nachdem nach den bereits ausgewählten Methoden gesucht wurde, damit sie nicht überschrieben werden.Dadurch ist es unmöglich, eine andere Versandoption auszuwählen. Dies löst das Problem für mich:
quelle
Es ist nicht erforderlich, dass das gesamte Modul diese Änderung erreicht. Sie können das Checkout-Modul einfach erweitern und in Ihrem Thema überschreiben.
Kopieren Sie die js-Datei checkout-data-resolver.js
von
vendor\magento\module-checkout\view\frontend\web\js\model
nach
app \ design \ frontend \ Namespace \ ThemeName \ Magento_Checkout \ web \ js \ model.
Suchen Sie die Zeile mit dem folgenden Code:
if (ratesData.length == 1) {
und ersetzen Sie sie durch:
if (ratesData.length >= 1 && !selectedShippingRate) {
quelle
Was Sie wahrscheinlich tun möchten, ist standardmäßig die günstigste Versandart auszuwählen.
Optional können Sie in Ihrem Modul-Over-Ride-Checkout-Daten-Resolver möglicherweise stattdessen ein Mixin verwenden.
Ändern Sie in der resolveShippingRates-Methode Folgendes:
quelle
Während die oben genannten Methoden vorschlagen, die js-Funktionen zu überschreiben, würde ich die Verwendung von Mixins empfehlen, um unnötige Codekonflikte zu vermeiden:
Fügen Sie in Ihrem Frontend requirejs-config.js Folgendes hinzu:
In Ihrer checkout-data-resolver.js
Alternativ können Sie das Modul hier herunterladen, mit dem Sie eine Standardversand- und Zahlungsmethode auswählen können: Standardversand- und Zahlungsmethode [M2]
quelle
Jeder, der onestepcheckout verwendet, kann dies versuchen:
Ich weiß, dass es dumm aussieht, aber aus irgendeinem Grund hat das Hinzufügen dieser Verzögerung wirklich für mich funktioniert. Die Versandkosten aktualisieren sich so.
quelle