ACTION
FO
Desde 1.5
actionAddProduct
~3 min de lectura
#Descripcion
Se ejecuta cuando un producto es añadido al carrito de compras. Este hook se dispara cada vez que un cliente agrega un articulo, permitiendo interceptar la accion para registrar analiticas, aplicar reglas de negocio personalizadas o sincronizar el carrito con sistemas externos. Se dispara tanto al añadir un nuevo producto como al incrementar la cantidad de uno existente.
Disparado por
-
CartController::processChangeProductInCart()— controllers/front/CartController.php
#Parametros
| Nombre | Tipo | Requerido | Descripcion |
|---|---|---|---|
| $cart | Cart | Si | Objeto Cart actual del cliente |
| $product | Product | Si | Objeto Product que se esta añadiendo al carrito |
| $id_product_attribute | int | Si | ID de la combinacion seleccionada (0 si el producto no tiene combinaciones) |
| $id_customization | int | Si | ID de personalizacion del producto (0 si no aplica) |
| $quantity | int | Si | Cantidad que se esta añadiendo |
| $operator | string | Si | Operacion realizada: 'up' para añadir, 'down' para reducir |
Retorno
void
Este hook no espera valor de retorno
#Ejemplo de codigo
mymodule.php
php
<?php
public function install()
{
return parent::install()
&& $this->registerHook('actionAddProduct');
}
mymodule.php
php
<?php
/**
* Hook actionAddProduct — producto añadido al carrito
*/
public function hookActionAddProduct(array $params)
{
/** @var Cart $cart */
$cart = $params['cart'];
/** @var Product $product */
$product = $params['product'];
$quantity = (int) $params['quantity'];
$idAttribute = (int) $params['id_product_attribute'];
// Ejemplo: Registrar evento para analiticas
Db::getInstance()->insert('mymodule_cart_events', [
'id_cart' => (int) $cart->id,
'id_product' => (int) $product->id,
'id_product_attribute' => $idAttribute,
'quantity' => $quantity,
'operator' => pSQL($params['operator']),
'id_customer' => (int) $cart->id_customer,
'date_add' => date('Y-m-d H:i:s'),
]);
// Ejemplo: Añadir producto regalo si se cumple condicion
if ($product->id == Configuration::get('MYMODULE_TRIGGER_PRODUCT')) {
$giftId = (int) Configuration::get('MYMODULE_GIFT_PRODUCT');
if ($giftId && !$cart->containsProduct($giftId)) {
$cart->updateQty(1, $giftId, null, false, 'up');
}
}
}
#Notas y gotchas
- ⚠️ El parametro `operator` puede ser 'up' (añadir) o 'down' (reducir). Ten cuidado de verificarlo antes de actuar.
- ⚠️ Este hook se dispara ANTES de que el carrito sea guardado en BD — si necesitas el carrito ya persistido, usa `actionCartSave`.
- ⚠️ No confundir con `actionBeforeCartUpdateQty`, que se ejecuta antes de la actualizacion real de cantidad.
- ⚠️ El objeto Product puede no tener precio especifico cargado — usa `Product::getPriceStatic()` si necesitas el precio real.
- ⚠️ En contexto de API/webservice, este hook puede no dispararse si el carrito se modifica directamente.
#Relacionados
#Historial de versiones
| Version PS | Cambio |
|---|---|
| 1.5 | Introducido con los parametros basicos |
| 1.7 | Sin cambios significativos. Compatible con PS 1.7+ |
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.