ACTION FO Desde 1.5

actionCartSave

~3 min de lectura

#Descripcion

Se ejecuta cada vez que el carrito es guardado en la base de datos, ya sea al añadir productos, cambiar cantidades, aplicar cupones o cualquier otra modificacion. Es el hook mas general del carrito y se dispara con mucha frecuencia, por lo que el codigo debe ser ligero.

📍
Disparado por
  • Cart::add() / update()classes/Cart.php

#Parametros

Nombre Tipo Requerido Descripcion
$cart Cart Si Objeto Cart que acaba de ser guardado
$id_cart int Si ID del carrito guardado
Retorno
void Este hook no espera valor de retorno

#Ejemplo de codigo

mymodule.php
php
<?php
public function install()
{
    return parent::install()
        && $this->registerHook('actionCartSave');
}
mymodule.php
php
<?php
/**
 * Hook actionCartSave — carrito guardado
 */
public function hookActionCartSave(array $params)
{
    if (empty($params['cart']) || empty($params['cart']->id)) {
        return;
    }

    /** @var Cart $cart */
    $cart = $params['cart'];

    // Ejemplo: Sincronizar carrito con servicio externo de remarketing
    $products = $cart->getProducts();
    $total = $cart->getOrderTotal(true, Cart::BOTH);

    // Solo sincronizar si el cliente esta logueado
    if ($cart->id_customer > 0) {
        $cacheKey = 'mymodule_cart_sync_' . (int) $cart->id;
        $lastSync = Cache::retrieve($cacheKey);
        $now = time();

        // Evitar sincronizar mas de una vez cada 30 segundos
        if (!$lastSync || ($now - $lastSync) > 30) {
            Cache::store($cacheKey, $now);
            // Guardar datos para sincronizacion asincrona
            Db::getInstance()->insert('mymodule_cart_sync', [
                'id_cart'     => (int) $cart->id,
                'id_customer' => (int) $cart->id_customer,
                'total'       => (float) $total,
                'nb_products' => count($products),
                'synced'      => 0,
                'date_add'    => date('Y-m-d H:i:s'),
            ], false, true, Db::ON_DUPLICATE_KEY);
        }
    }
}

#Notas y gotchas

  • ⚠️ Este hook se ejecuta MUY frecuentemente — evita consultas pesadas o llamadas HTTP sincronas.
  • ⚠️ El carrito puede estar vacio cuando se dispara (por ejemplo, al crear un carrito nuevo vacio).
  • ⚠️ Verifica siempre que `$params['cart']->id` exista antes de operar — puede ser null en algunos casos.
  • ⚠️ Se dispara tanto en add() como en update() del objeto Cart.
  • ⚠️ No confundir con `actionAddProduct` que solo se dispara al añadir un producto especifico.

#Relacionados

#Historial de versiones

Version PSCambio
1.5 Introducido
1.7 Sin cambios. Compatible con PS 1.7, 8.x y 9.x
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.