⚡ Nuevos Hooks en PrestaShop 9.1

Actualizado: 2026-04

#Resumen — 21 nuevos, 2 eliminados

PrestaShop 9.1 añade 21 nuevos hooks y elimina 2 hooks del sistema anterior de Cart Rules. A continuacion se documenta cada uno con su signature y ejemplo de uso.

#Hooks de ciclo de vida de modulos

Tres nuevos hooks permiten reaccionar a eventos de gestion de modulos:

#actionModuleEnable

Se dispara despues de que un modulo es habilitado (enable). Util para reactivar funcionalidades dependientes.

Ejemplo: reaccionar al enable de un modulo
php
public function hookActionModuleEnable(array $params): void
{
    $moduleName = $params['module_name']; // string
    
    if ($moduleName === 'ps_emailalerts') {
        // Reactivar integracion con alertas de email
        Configuration::updateValue('MY_MODULE_EMAIL_ALERTS', 1);
    }
}

#actionModuleDisable

Se dispara despues de que un modulo es deshabilitado. Util para limpiar dependencias.

Ejemplo: limpiar al disable de un modulo
php
public function hookActionModuleDisable(array $params): void
{
    $moduleName = $params['module_name'];
    
    if ($moduleName === 'ps_emailalerts') {
        Configuration::updateValue('MY_MODULE_EMAIL_ALERTS', 0);
        // Desactivar features que dependen del modulo
    }
}

#actionModuleUpgradeAfter

Se dispara despues de una actualizacion exitosa de modulo. Permite ejecutar logica post-upgrade (limpiar cache, reindexar, notificar).

Ejemplo: post-upgrade actions
php
public function hookActionModuleUpgradeAfter(array $params): void
{
    $moduleName = $params['module_name'];
    $moduleVersion = $params['module_version'] ?? '';
    
    // Log de upgrade para auditoria
    PrestaShopLogger::addLog(
        "Module {$moduleName} upgraded to {$moduleVersion}",
        1, null, 'Module', 0, true
    );
    
    // Limpiar cache de modulo si es necesario
    if ($moduleName === 'mi_modulo_dependiente') {
        Cache::clean('my_module_*');
    }
}

#Hooks de configuracion

#actionConfigurationUpdateValueBefore

Se dispara antes de que Configuration::updateValue() guarde un valor. Permite validar o modificar el valor antes de persistirlo.

Ejemplo: validar configuracion antes de guardar
php
public function hookActionConfigurationUpdateValueBefore(array $params): void
{
    $key = $params['key'];       // string — nombre de la configuracion
    $value = &$params['value'];  // mixed — valor (por referencia, modificable)
    
    // Ejemplo: forzar formato en un campo de configuracion
    if ($key === 'PS_SHOP_EMAIL') {
        $value = strtolower(trim($value));
        if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
            throw new \PrestaShopException('Email de tienda invalido');
        }
    }
}

#Hooks del sistema de descuentos

Estos hooks solo estan disponibles cuando el feature flag discount esta activo:

HookTipoCuando se dispara
actionAdminDuplicateDiscountBeforeActionAntes de duplicar un descuento
actionAdminDuplicateDiscountAfterActionDespues de duplicar un descuento
actionDiscountGridDefinitionModifierActionAl construir la definicion del grid de descuentos
actionDiscountGridQueryBuilderModifierActionAl construir la query SQL del grid
actionDiscountGridDataModifierActionAl procesar los datos del grid
actionDiscountGridFilterFormModifierActionAl construir los filtros del grid
actionDiscountGridPresenterModifierActionAl preparar datos para la vista del grid
Ejemplo: añadir columna al grid de descuentos
php
public function hookActionDiscountGridDefinitionModifier(array $params): void
{
    /** @var \PrestaShop\PrestaShop\Core\Grid\Definition\GridDefinitionInterface $definition */
    $definition = $params['definition'];
    
    $definition->getColumns()->addAfter(
        'name',
        (new \PrestaShop\PrestaShop\Core\Grid\Column\Type\DataColumn('usage_count'))
            ->setName($this->trans('Usos', [], 'Modules.Mymodule.Admin'))
            ->setOptions(['field' => 'usage_count'])
    );
}

#Hooks del sistema de tags

PS 9.1 moderniza el sistema de tags con nuevos hooks Symfony:

HookDescripcion
actionTagFormBuilderModifierModificar el formulario Symfony de tags
actionTagFormDataProviderDataModificar datos al cargar formulario de tag
actionTagFormDataProviderDefaultDataDatos por defecto del formulario
actionBeforeCreateTagFormHandlerAntes de crear un tag
actionAfterCreateTagFormHandlerDespues de crear un tag
actionBeforeUpdateTagFormHandlerAntes de actualizar un tag
actionAfterUpdateTagFormHandlerDespues de actualizar un tag

#Hooks de envio

HookDescripcion
actionOverrideShippingFreePriceSobreescribir logica de envio gratis por precio minimo
actionOverrideShippingFreeWeightSobreescribir logica de envio gratis por peso minimo
Ejemplo: envio gratis personalizado
php
public function hookActionOverrideShippingFreePrice(array $params): void
{
    // $params contiene el carrito y el carrier
    $cart = $params['cart'];
    $carrier = $params['carrier'];
    
    // Ejemplo: envio gratis si el cliente es VIP
    $customer = new Customer($cart->id_customer);
    if (in_array($customer->id_default_group, [3, 4])) { // Grupos VIP
        $params['is_free'] = true;
    }
}

#Hooks de combinaciones

#actionUpdateDefaultCombinationAfter

Se dispara despues de cambiar la combinacion por defecto de un producto. Util para recalcular precios, actualizar feeds, etc.

Ejemplo
php
public function hookActionUpdateDefaultCombinationAfter(array $params): void
{
    $productId = (int) $params['id_product'];
    $combinationId = (int) $params['id_product_attribute'];
    
    // Actualizar feed de Google Shopping
    $this->updateProductFeed($productId, $combinationId);
}

#Hooks de Hummingbird

El tema Hummingbird introduce cambios en hooks de display:

CambioDetalle
displaySearch — ELIMINADOCausaba conflictos en paginas 404. Ya no existe en Hummingbird.
displayOrderDetail — NUEVO USOReemplaza la variable hook $HOOK_DISPLAYORDERDETAIL
displayModalContent — NUEVOPermite inyectar contenido en modals del tema

#Hooks eliminados en PS 9.1

🚨
Hooks eliminados

Si tu modulo usa estos hooks, dejara de funcionar en PS 9.1:

Hook eliminadoRazonAlternativa
actionCartRuleFormDataProviderDataReemplazado por el nuevo sistema de descuentosactionDiscountGridDataModifier o el nuevo FormType de descuentos
actionCartRuleFormDataProviderDefaultDataReemplazado por el nuevo sistema de descuentosNuevo FormType de descuentos
displaySearch (en Hummingbird)Conflictos con pagina 404Usar displayTop o widget de busqueda propio
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.