Header Ads Widget

Ticker

6/recent/ticker-posts

¿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 archivo de abajo para arreglar el mismo. Haremos cambios en el archivo Core para el mismo.
Directorio raíz \ clases \ PaymentModule.php

Procedimiento

Necesitamos modificar la función de validación de pedido 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 varios carritos.

?
1
2
3
4
5
6
7
if (self::DEBUG_MODE) {
PrestaShopLogger::addLog('PaymentModule::validateOrder - Function called', 1, null, 'Cart', (int)$id_cart, true);
}
if (!isset($this->context)) {
$this->context = Context::getContext();
}
$this->context->cart = new Cart((int)$id_cart);

El siguiente código debe agregarse en la función de validación de pedido después de las líneas anteriores.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// changes started
// To save the secure key of current cart id and reassign the same to new cart
$old_cart_secure_key = $this->context->cart->secure_key;
// To save the customer id of current cart id and reassign the same to new cart
$old_cart_customer_id = (int)$this->context->cart->id_customer;
// To unmap the customer from old cart
$this->context->cart->id_customer = 0;
// To update the cart
$this->context->cart->save();
// To fetch the current cart products
$cart_products = $this->context->cart->getProducts();
// Creating new cart object
$this->context->cart = new Cart();
$this->context->cart->id_lang = $this->context->language->id;
$this->context->cart->id_currency = $this->context->currency->id;
// to add new cart
$this->context->cart->add();
// to update the new cart
foreach ($cart_products as $product) {
$this->context->cart->updateQty((int) $product['quantity'], (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;
}
// to map the new cart with the customer
$this->context->cart->id_customer = $old_cart_customer_id;
// to save the new cart
$this->context->cart->save();
if ($this->context->cart->id) {
$this->context->cookie->id_cart = (int) $this->context->cart->id;
$this->context->cookie->write();
}
// to update the $id_cart with that of new cart
$id_cart = (int) $this->context->cart->id;
$this->context->cart->secure_key = $old_cart_secure_key;
// changes over

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 carrito de compras

Resumen

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

Publicar un comentario

0 Comentarios