¿Cómo copiar el carrito en otro carrito para cambiar el id_cart?

Objetivos del blog.

Después de leer este blog, podremos copiar el carrito en otro carrito para cambiar el ID del carrito.

Requisito

Necesitamos modificar el siguiente archivo para arreglar el mismo. Estaremos haciendo cambios en el archivo Core para el mismo.

Root dir \ classes \ PaymentModule.php

Procedimiento

Necesitamos modificar la función de validar orden en el archivo de clase PaymentModule. Como esta función se llama solo una vez al completar el pedido. Así que hemos agregado el código en el mismo para evitar la creación de múltiples carros.

if (self :: DEBUG_MODE) {PrestaShopLogger :: addLog ('PaymentModule :: validateOrder - Función llamada', 1, null, 'Cart', (int) $ id_cart, true); } if (! isset ($ this-> context)) {$ this-> context = Context :: getContext (); } $ this-> context-> cart = new Cart ((int) $ id_cart);

El código siguiente debe agregarse en la función de validar orden después de las líneas anteriores.

// cambios iniciados // Para guardar la clave segura del ID del carrito actual y reasignar la misma al nuevo carrito $ old_cart_secure_key = $ this-> context-> cart-> secure_key; // Para guardar el ID de cliente del ID de carrito actual y reasignar el mismo al nuevo carrito $ old_cart_customer_id = (int) $ this-> context-> cart-> id_customer; // Para desasignar al cliente del carrito antiguo $ this-> context-> cart-> id_customer = 0; // Para actualizar el carrito $ this-> context-> cart-> save (); // Para obtener los productos del carrito actual $ cart_products = $ this-> context-> cart-> getProducts (); // Crear nuevo objeto de carrito $ this-> context-> cart = new Cart (); $ this-> context-> cart-> id_lang = $ this-> context-> language-> id; $ this-> context-> cart-> id_currency = $ this-> context-> currency-> id; // para agregar nuevo carrito $ this-> context-> cart-> add (); // para actualizar el nuevo carrito foreach ($ cart_products as $ product) {$ this-> context-> cart-> updateQty ((int) $ product ['cantidad'], (int) $ product ['id_product'], (int) $ product ['id_product_attribute']); } if ($ this-> context-> cookie-> id_guest) {$ guest = new Guest ($ this-> context-> cookie-> id_guest); $ this-> context-> cart-> mobile_theme = $ guest-> mobile_theme; } // para asignar el nuevo carrito con el cliente $ this-> context-> cart-> id_customer = $ old_cart_customer_id; // para guardar el nuevo carrito $ this-> context-> cart-> save (); if ($ this-> context-> cart-> id) {$ this-> context-> cookie-> id_cart = (int) $ this-> context-> cart-> id; $ this-> context-> cookie-> write (); } // para actualizar el $ id_cart con el del nuevo carrito $ id_cart = (int) $ this-> context-> cart-> id; $ this-> context-> cart-> secure_key = $ old_cart_secure_key; // cambios en

Después de seguir el procedimiento anterior, la lista del carrito de la compra se verá así, es decir, tendrá un carrito duplicado con los mismos detalles que el carrito con el que se realizó el pedido.
lista de carro de compras

Resumen

Después de seguir el procedimiento anterior, podrá copiar el carrito en otro carrito para cambiar el id_cart.


Leave a Reply

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