PrestaShop no añade productos al carrito

En esta entrada recapitulo las acciones que hice para «arreglar» el carrito de una tienda desarrollada en PrestaShop 1.7, así como otras alternativas que he recapitulado y que deduzco que a otras personas le han funcionado.

Antecedentes

La base de datos de esta tienda online había crecido de forma desmesurada y necesitaba aliviar el peso de la misma.

En su momento, había ejecutado unas consultas para aliviar la base de datos, que fueron las siguientes:

truncate table PS_cart_product;
truncate table PS_cart;
truncate table PS_cart_discount;

Consultas que en anteriores ocasiones había realizado, pero no había caído en que las había usado en versiones de Prestashop 1.6.

Tendría que haber sospechado que la información vista no era válida para la versión 1.7  de PrestaShop, ya que en esta versión no existe la tabla «PS_cart_discount».

Y efectivamente, si se ejecutan en la versión 1.7 hay que hacer unos ajustes manuales en la base de datos.

El error que obtenía era el siguiente «Frontcontroller::init – Cart cannot be loaded or an order has already been placed using this cart».

Mensaje de error Prestashop

La solución a mi problema particular

Al haber vaciado la tabla de los carritos, los IDs en la base de datos se habían descuadrado y en ciertas ocasiones, el añadir productos al carrito fallaba.

La solución es ver el ID del carrito de la tabla carrito (ps_cart) y el ID del carrito de la tabla pedidos (ps_orders).

SELECT id_cart FROM ps_cart ORDER by id_cart DESC LIMIT 1;
SELECT id_cart FROM ps_orders ORDER by id_cart DESC LIMIT 1;

Estas consultas devuelven dos valores.

El ID de la tabla del carrito debe ser siempre mayor que el de la tabla de los pedidos.

Si te sucede esto, tiene solución fácil, tan solo debes ejecutar esta sentencia SQL:

ALTER TABLE ps_cart AUTO_INCREMENT = 5000;

El valor de 5000 es un ejemplo, tienes que poner un valor mayor de lo que devuelve esta consulta —> SELECT id_cart FROM ps_orders ORDER by id_cart DESC LIMIT 1;

Explicación:

Cuando un cliente añade productos se crea un carrito de compra en la base de datos (tabla ps_cart), cuando se hace el pago, se origina un pedido (tabla ps_orders), y el pedido que se acaba de crear se relaciona, en la base de datos, con el carrito creado previamente.

Como se habían eliminado todos los carritos, pasaba que al añadir productos al carrito, PrestaShop detectaba que ese carrito ya tenía relación con un pedido ya finalizado… Esto provocaba que no se pudieran añadir productos al carrito.

Intentos de arreglos que no funcionaron

Editar de la clase del carrito «Cart.php», modificando el cartExists() y devolviendo false en vez de un ID, pero esto provocaba fallos a la hora de pagar, en este caso, en PayPal.

Había probado a desactivar la geolocalización, que había leído que a veces da problemas…

Regeneré los enlaces permanentes, activando y desactivando las URLs amigables (Parámetros Avanzados > Tráfico & SEO)

Comprobé en que el dominio fuera sin las www.

Volví a instalar el tema por defecto y seguía pasando.

Parámetros Avanzados > Tráfico & SEO revisé que la opción «Disable Apache’s mod_security module» estuviera marcada la opción «No».

Pero nada de esto lo solventó, seguía sin poder añadir productos al carrito.

No desesperes

Si esto no te soluciona el problema, ponme un comentario, a ver si entre los dos podemos dar con la solución y que quede constancia de ello para la comunidad de PrestaShop

Fuente: Stackoverflow

¡Valora este artículo y ayúdame a mejorar la calidad del blog, si no te ha servido, déjame un comentario para revisarlo!
(Votos: 1 Promedio: 5)