Si j'ai bien compris votre question, vous voulez toujours avoir une méthode d'expédition sélectionnée lorsque quelqu'un vient sur la page de paiement.
Pour ce faire, nous devons remplacer un javascript du module Magento_Checkout.
Tout d'abord, nous devons créer un module:
Espace de noms / Module / registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
Espace de noms / 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>
Après cela, nous devons créer les requirejs pour remplacer ce js.
Espace de noms / Module / view / frontend / requirejs-config.js
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
}
}
};
Maintenant , nous devons copier checkout-data-resolver.js
de Magento_Checkout/view/frontend/web/js/model
notre module avec le même cheminNamespace_Module/view/frontend/web/js/model
Après cela, nous devons changer une condition à l'intérieur de la fonction resolveShippingRates: function (ratesData)
De:
...
if (ratesData.length == 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
À:
...
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Et c'est tout, il ne vous reste plus qu'à:
- Activer le module: module php bin / magento: activer Namespace_Module
- Exécutez une mise à niveau de configuration: configuration de php bin / magento: mise à niveau
- Faites un déploiement statique: configuration de php bin / magento: contenu statique: déploiement
selectShippingMethodAction(ratesData[0]);
downn un peu plus bas dans la méthode, après avoir recherché les méthodes déjà sélectionnées, donc il ne les remplace pas.Cela rendra impossible la sélection d'une autre option d'expédition. Cela résout le problème pour moi:
la source
Il n'y a pas besoin de module entier pour réaliser ce changement. Vous pouvez simplement étendre le module Checkout et le remplacer dans votre thème.
Copiez le fichier js données de caisse-resolver.js-
de
vendor\magento\module-checkout\view\frontend\web\js\model
à
l' application \ conception \ frontend \ Namespace \ ThemeName \ Magento_Checkout \ web \ modèle \ js.
Localisez la ligne avec le code suivant:
if (ratesData.length == 1) {
et remplacez-la par:
if (ratesData.length >= 1 && !selectedShippingRate) {
la source
Ce que vous voulez probablement faire, c'est sélectionner la méthode d'expédition la moins chère par défaut.
Dans votre module over ride checkout-data-resolver, vous pouvez éventuellement utiliser un mixin à la place.
dans la méthode resolShippingRates, modifiez comme suit:
la source
Bien que les méthodes ci-dessus suggèrent de remplacer les fonctions js, je recommanderais d'utiliser des mixins pour éviter les conflits de code inutiles:
Dans votre frontend requirejs-config.js ajoutez les éléments suivants:
Dans votre checkout-data-resolver.js
Alternativement, vous pouvez télécharger le module ici qui vous permet de sélectionner une méthode d'expédition et de paiement par défaut : Méthode d'expédition et de paiement par défaut [M2]
la source
Quiconque utilise onestepcheckout peut essayer ceci:
Je sais que ça a l'air stupide, mais pour une raison quelconque, l'ajout de ce délai a vraiment fonctionné pour moi. Le coût d'expédition se met à jour comme ceci.
la source