Comment copier un panier dans un autre panier afin de changer le id_cart?

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.
shopping-cart-list

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.


Leave a Reply

Your email address will not be published. Required fields are marked *