Entender las prioridades de hooks PrestaShop y el orden de ejecución

386 vistas

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 principal
  • displayFooter — área del pie de página
  • displayProductAdditionalInfo — 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 guarda
  • actionOrderStatusUpdate — cuando el estado del pedido cambia
  • actionValidateOrder — 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.

Cargando...
Volver arriba