Hola @natalia8994,
Gracias por proporcionar el fragmento de código. @raulonline y @pedroauto96 están en lo cierto. La modificación del constructor de Cart no es el lugar ideal para implementar una lógica de 'protección de carro' persistente, ya que solo manipula el objeto Cart en la base de datos y no la sesión del usuario o la lógica de carga del carrito de PrestaShop.
En PrestaShop 1.7.2.4, la lógica para cargar y guardar el carrito se gestiona en varios puntos, principalmente en el FrontController y también en la clase Context. Para asegurar que un carrito sea persistente más allá de la sesión actual o de un cierre de sesión, necesitas asociar el carrito a un cliente de forma más robusta y gestionarlo en el momento de la autenticación o al iniciar la sesión.
Una forma más limpia de abordar esto sería utilizar un hook, como actionAuthentication o actionFrontControllerSetMedia, para verificar y cargar un carrito persistente asociado a un cliente. Aquí te muestro un ejemplo de cómo podrías hacer esto en un módulo o en un override de FrontController (aunque un módulo es siempre preferible):
class FrontController extends FrontControllerCore
{
public function initCtxt()
{
parent::initCtxt();
if ($this->context->customer->isLogged() && !isset($this->context->cart->id))
{
$id_cart_from_db = (int)Db::getInstance()->getValue('SELECT id_cart FROM '._DB_PREFIX_.'cart WHERE id_customer = '.(int)$this->context->customer->id.' AND id_shop = '.(int)$this->context->shop->id.' ORDER BY date_upd DESC');
if ($id_cart_from_db)
{
Este código, colocado en un override de FrontController o en un hook adecuado dentro de un módulo, intentaría cargar el último carrito activo de un cliente si no tiene uno asociado en la sesión actual. Es una solución más dirigida a mantener el carrito asociado al cliente.
Sin embargo, implementar una funcionalidad completa de 'protección de carro' que maneje múltiples escenarios (carritos abandonados, recuperación de sesión, caducidad extendida, etc.) es complejo y requiere tocar varias partes del core. Para una solución robusta y que no tengas que mantener manualmente con cada actualización de PrestaShop, te recomendaría considerar una solución para protección de carro dedicada. Estos módulos están diseñados para gestionar la persistencia del carrito de forma segura y eficiente sin riesgo de romper tu tienda.