⚡ Nuevos Hooks en PrestaShop 9.1
#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.
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.
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).
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.
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:
| Hook | Tipo | Cuando se dispara |
|---|---|---|
| actionAdminDuplicateDiscountBefore | Action | Antes de duplicar un descuento |
| actionAdminDuplicateDiscountAfter | Action | Despues de duplicar un descuento |
| actionDiscountGridDefinitionModifier | Action | Al construir la definicion del grid de descuentos |
| actionDiscountGridQueryBuilderModifier | Action | Al construir la query SQL del grid |
| actionDiscountGridDataModifier | Action | Al procesar los datos del grid |
| actionDiscountGridFilterFormModifier | Action | Al construir los filtros del grid |
| actionDiscountGridPresenterModifier | Action | Al preparar datos para la vista del grid |
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:
| Hook | Descripcion |
|---|---|
| actionTagFormBuilderModifier | Modificar el formulario Symfony de tags |
| actionTagFormDataProviderData | Modificar datos al cargar formulario de tag |
| actionTagFormDataProviderDefaultData | Datos por defecto del formulario |
| actionBeforeCreateTagFormHandler | Antes de crear un tag |
| actionAfterCreateTagFormHandler | Despues de crear un tag |
| actionBeforeUpdateTagFormHandler | Antes de actualizar un tag |
| actionAfterUpdateTagFormHandler | Despues de actualizar un tag |
#Hooks de envio
| Hook | Descripcion |
|---|---|
| actionOverrideShippingFreePrice | Sobreescribir logica de envio gratis por precio minimo |
| actionOverrideShippingFreeWeight | Sobreescribir logica de envio gratis por peso minimo |
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.
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:
| Cambio | Detalle |
|---|---|
| displaySearch — ELIMINADO | Causaba conflictos en paginas 404. Ya no existe en Hummingbird. |
| displayOrderDetail — NUEVO USO | Reemplaza la variable hook $HOOK_DISPLAYORDERDETAIL |
| displayModalContent — NUEVO | Permite inyectar contenido en modals del tema |
#Hooks eliminados en PS 9.1
Si tu modulo usa estos hooks, dejara de funcionar en PS 9.1:
| Hook eliminado | Razon | Alternativa |
|---|---|---|
| actionCartRuleFormDataProviderData | Reemplazado por el nuevo sistema de descuentos | actionDiscountGridDataModifier o el nuevo FormType de descuentos |
| actionCartRuleFormDataProviderDefaultData | Reemplazado por el nuevo sistema de descuentos | Nuevo FormType de descuentos |
| displaySearch (en Hummingbird) | Conflictos con pagina 404 | Usar displayTop o widget de busqueda propio |