Wie kopiere ich den Warenkorb in einen anderen Warenkorb, um den id_cart zu ändern?

Ziele des Blogs

Nach dem Lesen dieses Blogs können wir den Warenkorb in einen anderen Warenkorb kopieren, um die Warenkorb-ID zu ändern.

Anforderung

Wir müssen die folgende Datei ändern, um das Problem zu beheben. Wir werden für dieselbe Änderung in der Core-Datei vornehmen.

Wurzelverzeichnis \ classes \ PaymentModule.php

Verfahren

Wir müssen die Funktion validate order in der PaymentModule-Klassendatei ändern. Da diese Funktion nur einmal während des Bestellvorgangs aufgerufen wird. Wir haben also den Code im selben hinzugefügt, um die Erstellung mehrerer Wagen zu vermeiden.

if (self :: DEBUG_MODE) {PrestaShopLogger :: addLog ('PaymentModule :: validateOrder - Funktion aufgerufen', 1, null, 'Cart', (int) $ id_cart, true); } if (! isset ($ this-> context)) {$ this-> context = Kontext :: getContext (); } $ this-> context-> cart = neuer Warenkorb ((int) $ id_cart);

Der nachstehende Code muss in der Funktion zum Bestätigen der Reihenfolge nach den obigen Zeilen hinzugefügt werden.

// Änderungen gestartet // Um ​​den sicheren Schlüssel der aktuellen Warenkorb-ID zu speichern und ihn dem neuen Warenkorb erneut zuzuweisen. $ old_cart_secure_key = $ this-> context-> cart-> secure_key; // Um ​​die Kundennummer der aktuellen Warenkorb-ID zu speichern und sie dem neuen Warenkorb erneut zuzuweisen. $ Old_cart_customer_id = (int) $ this-> context-> cart-> id_customer; // So entfernen Sie den Kunden aus dem alten Warenkorb $ this-> context-> cart-> id_customer = 0; // Um ​​den Einkaufswagen zu aktualisieren, $ this-> context-> cart-> save (); // Abrufen der aktuellen Warenkorbprodukte $ cart_products = $ this-> context-> cart-> getProducts (); // Neues Einkaufswagenobjekt erstellen $ this-> context-> cart = new Cart (); $ this-> context-> cart-> id_lang = $ this-> context-> language-> id; $ this-> context-> cart-> id_currency = $ this-> context-> currency-> id; // um einen neuen Einkaufswagen hinzuzufügen $ this-> context-> cart-> add (); // um den neuen Warenkorb zu aktualisieren ($ cart_products als $ product) {$ this-> context-> cart-> updateQty ((int) $ product ['Quantity'], (int) $ product ['id_product']), (int) $ product ['id_product_attribute']); } if ($ this-> context-> cookie-> id_guest) {$ guest = neuer Gast ($ this-> context-> cookie-> id_guest); $ this-> context-> cart-> mobile_theme = $ guest-> mobile_theme; } // um den neuen Einkaufswagen mit dem Kunden $ this-> context-> cart-> id_customer = $ old_cart_customer_id abzubilden; // um den neuen Warenkorb zu speichern $ this-> context-> cart-> save (); if ($ this-> context-> cart-> id) {$ this-> context-> cookie-> id_cart = (int) $ this-> context-> cart-> id; $ this-> context-> cookie-> write (); } // um den $ id_cart mit dem des neuen cart zu aktualisieren $ id_cart = (int) $ this-> context-> cart-> id; $ this-> context-> cart-> secure_key = $ old_cart_secure_key; // wechselt um

Nach dem oben beschriebenen Verfahren sieht die Warenkorbliste folgendermaßen aus, dh sie hat einen doppelten Wagen mit den gleichen Daten wie der Wagen, mit dem die Bestellung aufgegeben wurde.
Warenkorb-Liste

Zusammenfassung

Nach dem oben beschriebenen Verfahren können Sie den Warenkorb in einen anderen Warenkorb kopieren, um den id_cart zu ändern.


Leave a Reply

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