ACTION BO Desde 1.5

actionProductUpdate

~3 min de lectura

#Descripcion

Se ejecuta cuando un producto existente es actualizado en el back office. Se dispara despues de guardar los cambios del producto en la base de datos. Ideal para detectar cambios en productos ya existentes y reaccionar ante modificaciones de precio, stock, descripcion, etc.

📍
Disparado por
  • AdminProductsController::processUpdate()controllers/admin/AdminProductsController.php

#Parametros

Nombre Tipo Requerido Descripcion
$id_product int Si ID del producto actualizado
$product Product Si Objeto Product con los datos actualizados
Retorno
void Este hook no espera valor de retorno

#Ejemplo de codigo

mymodule.php
php
<?php
public function install()
{
    return parent::install()
        && $this->registerHook('actionProductUpdate');
}
mymodule.php
php
<?php
/**
 * Hook actionProductUpdate — producto actualizado
 */
public function hookActionProductUpdate(array $params)
{
    $idProduct = (int) $params['id_product'];
    /** @var Product $product */
    $product = $params['product'];

    // Ejemplo: Detectar cambio de precio y notificar a clientes con alerta
    $oldPrice = (float) Db::getInstance()->getValue(
        'SELECT price FROM `' . _DB_PREFIX_ . 'mymodule_price_history`
         WHERE id_product = ' . $idProduct . '
         ORDER BY date_add DESC LIMIT 1'
    );

    $newPrice = (float) $product->price;

    // Guardar historial de precio
    Db::getInstance()->insert('mymodule_price_history', [
        'id_product' => $idProduct,
        'price'      => $newPrice,
        'date_add'   => date('Y-m-d H:i:s'),
    ]);

    // Si el precio bajo, marcar para notificacion
    if ($oldPrice > 0 && $newPrice < $oldPrice) {
        $reduction = round((1 - $newPrice / $oldPrice) * 100, 1);
        Db::getInstance()->insert('mymodule_price_alerts_queue', [
            'id_product'   => $idProduct,
            'old_price'    => $oldPrice,
            'new_price'    => $newPrice,
            'reduction_pct'=> $reduction,
            'processed'    => 0,
            'date_add'     => date('Y-m-d H:i:s'),
        ]);
    }
}

#Notas y gotchas

  • ⚠️ Solo se dispara para productos que ya existen — para nuevos, usa `actionProductAdd`.
  • ⚠️ El producto ya tiene los datos actualizados cuando se ejecuta este hook.
  • ⚠️ Para capturar actualizaciones a nivel ORM (no solo desde el controlador admin), usa `actionObjectProductUpdateAfter`.
  • ⚠️ En PS 1.7+ con el formulario Symfony, el orden de ejecucion de hooks puede variar respecto a 1.6.
  • ⚠️ Si necesitas capturar tanto creaciones como actualizaciones, usa `actionProductSave`.

#Relacionados

#Historial de versiones

Version PSCambio
1.5 Introducido
1.7 Compatible con Symfony. Sin cambios en parametros
8.0 Sin cambios. Compatible
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.