ACTION BO Desde 1.5

actionProductAdd

~3 min de lectura

#Descripcion

Se ejecuta cuando un nuevo producto es creado en el back office. Se dispara despues de que el producto se guarda por primera vez en la base de datos. Util para inicializar datos adicionales del modulo, crear registros asociados o sincronizar el nuevo producto con sistemas externos.

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

#Parametros

Nombre Tipo Requerido Descripcion
$id_product int Si ID del nuevo producto creado
$product Product Si Objeto Product recien creado
Retorno
void Este hook no espera valor de retorno

#Ejemplo de codigo

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

    // Ejemplo: Inicializar configuracion del modulo para el nuevo producto
    Db::getInstance()->insert('mymodule_product_config', [
        'id_product'       => $idProduct,
        'auto_seo'         => 1,
        'sync_marketplace' => 0,
        'ai_description'   => 0,
        'date_add'         => date('Y-m-d H:i:s'),
    ]);

    // Ejemplo: Asignar automaticamente a categoria por defecto del modulo
    $defaultCategory = (int) Configuration::get('MYMODULE_DEFAULT_CATEGORY');
    if ($defaultCategory > 0) {
        $product->addToCategories([$defaultCategory]);
    }

    // Ejemplo: Registrar para generacion automatica de SEO
    if (Configuration::get('MYMODULE_AUTO_SEO')) {
        Db::getInstance()->insert('mymodule_seo_queue', [
            'id_product' => $idProduct,
            'type'       => 'new_product',
            'processed'  => 0,
            'date_add'   => date('Y-m-d H:i:s'),
        ]);
    }
}

#Notas y gotchas

  • ⚠️ Solo se dispara para productos nuevos — para actualizaciones usa `actionProductUpdate`.
  • ⚠️ El producto ya esta en BD con un ID valido cuando se ejecuta este hook.
  • ⚠️ Para capturar la creacion a nivel ORM (incluyendo imports/API), usa `actionObjectProductAddAfter`.
  • ⚠️ En PS 1.7+, puede dispararse en un contexto Symfony diferente al controlador clasico.
  • ⚠️ Si necesitas capturar tanto creacion como actualizacion, usa `actionProductSave`.

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