Objectifs du blog
Après avoir lu ce blog, nous pourrons copier le panier dans un autre panier afin de changer l'identifiant du panier.
Exigence
Nous devons modifier le fichier ci-dessous pour résoudre le même problème. Nous allons apporter des modifications dans le fichier Core pour les mêmes.
Répertoire racine \ classes \ PaymentModule.php
Procédure
Nous devons modifier la fonction de validation de la commande dans le fichier de classe PaymentModule. Comme cette fonction est appelée une seule fois lors de la finalisation de la commande. Nous avons donc ajouté le même code pour éviter la création de plusieurs paniers.
if (self :: DEBUG_MODE) {PrestaShopLogger :: addLog ('PaymentModule :: validateOrder - Fonction appelée', 1, null, 'Panier', (int) $ id_cart, true); } if (! isset ($ this-> context)) {$ this-> context = Context :: getContext (); } $ this-> context-> cart = new Panier ((int) $ id_cart);
Le code ci-dessous doit être ajouté dans la fonction de validation de la commande après les lignes ci-dessus.
// changements démarrés // Pour enregistrer la clé sécurisée de l'ID de panier actuel et la réaffecter au nouveau panier $ old_cart_secure_key = $ this-> context-> cart-> secure_key; // Pour sauvegarder l'identifiant client de l'identifiant actuel du panier et le réaffecter au nouveau panier $ old_cart_customer_id = (int) $ this-> context-> cart-> id_customer; // Pour supprimer le mappage du client de l'ancien panier $ this-> contexte-> panier-> id_customer = 0; // Pour mettre à jour le panier $ this-> context-> cart-> save (); // Pour récupérer les produits de panier actuels $ cart_products = $ this-> context-> cart-> getProducts (); // Création d'un nouvel objet cart $ this-> context-> cart = new Cart (); $ this-> context-> cart-> id_lang = $ this-> context-> language-> id; $ this-> context-> cart-> id_currency = $ this-> context-> currency-> id; // ajouter un nouveau panier $ this-> context-> cart-> add (); // pour mettre à jour le nouveau panier foreach ($ cart_products as $ product) {$ this-> contexte-> cart-> updateQty ((int) $ product ['quantité'], (int) $ product ['id_product'], (int) $ product ['id_product_attribute']); } if ($ this-> context-> cookie-> id_guest) {$ guest = nouvel invité ($ this-> context-> cookie-> id_guest); $ this-> context-> cart-> mobile_theme = $ guest-> mobile_theme; } // pour mapper le nouveau panier avec le client $ this-> context-> cart-> id_customer = $ old_cart_customer_id; // pour enregistrer le nouveau panier $ this-> context-> cart-> save (); if ($ this-> context-> cart-> id) {$ this-> context-> cookie-> id_cart = (int) $ this-> context-> cart-> id; $ this-> context-> cookie-> write (); } // pour mettre à jour le $ id_cart avec celui du nouveau panier $ id_cart = (int) $ this-> context-> cart-> id; $ this-> context-> cart-> secure_key = $ old_cart_secure_key; // bascule
Après avoir suivi la procédure ci-dessus, la liste du panier d'achat se présentera de la manière suivante: c’est-à-dire qu’il aura un duplicata du panier avec les mêmes détails que le panier avec lequel la commande est passée.
Résumé
Après avoir suivi la procédure ci-dessus, vous pourrez copier le panier dans un autre panier afin de changer le id_cart.