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 PS | Cambio |
|---|---|
| 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.