ACTION BO Desde 1.5

actionProductDelete

~3 min de lectura

#Descripcion

Se ejecuta cuando un producto es eliminado desde el back office. Se dispara antes de que el producto sea borrado de la base de datos, permitiendo limpiar datos asociados del modulo, eliminar archivos relacionados o notificar a sistemas externos de la baja del producto.

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

#Parametros

Nombre Tipo Requerido Descripcion
$id_product int Si ID del producto que se va a eliminar
$product Product Si Objeto Product que sera eliminado
Retorno
void Este hook no espera valor de retorno

#Ejemplo de codigo

mymodule.php
php
<?php
public function install()
{
    return parent::install()
        && $this->registerHook('actionProductDelete');
}
mymodule.php
php
<?php
/**
 * Hook actionProductDelete — producto eliminado
 */
public function hookActionProductDelete(array $params)
{
    $idProduct = (int) $params['id_product'];

    // Ejemplo: Limpiar datos del modulo asociados al producto
    $tables = [
        'mymodule_product_config',
        'mymodule_product_seo',
        'mymodule_product_sync',
        'mymodule_price_history',
    ];

    foreach ($tables as $table) {
        Db::getInstance()->delete($table, 'id_product = ' . $idProduct);
    }

    // Ejemplo: Eliminar archivos personalizados del producto
    $customDir = _PS_MODULE_DIR_ . $this->name . '/uploads/products/' . $idProduct;
    if (is_dir($customDir)) {
        Tools::deleteDirectory($customDir);
    }

    // Ejemplo: Notificar eliminacion a marketplace externo
    Db::getInstance()->insert('mymodule_sync_queue', [
        'action'     => 'delete',
        'id_product' => $idProduct,
        'reference'  => pSQL($params['product']->reference),
        'processed'  => 0,
        'date_add'   => date('Y-m-d H:i:s'),
    ]);
}

#Notas y gotchas

  • ⚠️ El producto todavia existe en BD cuando se ejecuta este hook — puedes acceder a sus datos.
  • ⚠️ Limpia siempre los datos de tu modulo asociados al producto para evitar datos huerfanos.
  • ⚠️ Para capturar la eliminacion a nivel ORM, usa `actionObjectProductDeleteAfter`.
  • ⚠️ La eliminacion masiva de productos tambien dispara este hook para cada producto individual.
  • ⚠️ En PS 1.7+ los productos tambien pueden desactivarse en lugar de eliminarse — este hook no se dispara para desactivaciones.

#Relacionados

#Historial de versiones

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