Entender las prioridades de hooks PrestaShop y el orden de ejecución
Qué son los hooks en PrestaShop
Los hooks son el mecanismo de extensión de PrestaShop — los puntos en el código donde los módulos pueden engancharse para agregar funcionalidad, modificar comportamiento o inyectar contenido en las páginas.
Dos tipos de hooks
Hooks de visualización
Los hooks de visualización (con prefijo display) inyectan contenido HTML en la página. Ejemplos -
displayHeader— dentro de la sección<head>displayHome— área de contenido de la página principaldisplayFooter— área del pie de páginadisplayProductAdditionalInfo— info adicional del producto
Hooks de acción
Los hooks de acción (con prefijo action) ejecutan lógica sin devolver HTML. Ejemplos -
actionCartSave— cuando un carrito se guardaactionOrderStatusUpdate— cuando el estado del pedido cambiaactionValidateOrder— cuando un pedido se valida
Cómo funciona el orden de ejecución
PrestaShop consulta la tabla ps_hook_module para encontrar los módulos registrados en un hook. Los módulos se ejecutan en el orden de la columna position.
SELECT hm.position, m.name AS module_name, h.name AS hook_name
FROM ps_hook_module hm
JOIN ps_module m ON hm.id_module = m.id_module
JOIN ps_hook h ON hm.id_hook = h.id_hook
WHERE h.name = 'displayHeader'
ORDER BY hm.position ASC;Registrar hooks en tu módulo
public function install()
{
return parent::install()
&& $this->registerHook('displayHeader')
&& $this->registerHook('displayProductAdditionalInfo')
&& $this->registerHook('actionCartSave');
}
public function hookDisplayHeader($params)
{
$this->context->controller->addCSS($this->_path . 'views/css/style.css');
}
public function hookActionCartSave($params)
{
$cart = $params['cart'];
$this->logCartActivity($cart);
}Gestionar posiciones de hooks en el Back Office
Navega a Diseño > Posiciones para ver todos los hooks y sus módulos asociados. Puedes reordenar con arrastrar y soltar o trasplantar módulos.
Problemas comunes de ejecución de hooks
Conflictos entre módulos
Cuando dos módulos en el mismo hook producen contenido duplicado, reordénalos o desengáncha el módulo problemático.
Impacto en el rendimiento
SELECT h.name, COUNT(*) AS module_count
FROM ps_hook_module hm
JOIN ps_hook h ON hm.id_hook = h.id_hook
GROUP BY h.name
ORDER BY module_count DESC
LIMIT 20;Hooks importantes para propietarios de tiendas
- Checkout - displayPayment, paymentOptions, actionValidateOrder
- SEO - displayHeader, filterHtmlContent
- Visualización de producto - displayProductAdditionalInfo, displayAfterProductThumbs
¿Le resultó útil esta respuesta?
¿Aún tiene preguntas?
Can't find what you're looking for? Send us your question and we'll get back to you quickly.