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 PSCambio
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.