Dominar los Hooks de PrestaShop: referencia para desarrolladores para 1.7, 8.x y 9.x
Los hooks son la forma en que los módulos interactuan con PrestaShop sin modificar archivos del nucleo. Entender que hook usar, cuando se dispara y que datos proporciona es conocimiento esencial para todo desarrollador de PrestaShop. Esta referencia cubre los hooks que usaras con mas frecuencia.
Display Hooks vs. Action Hooks
PrestaShop tiene dos tipos de hooks:
- Display Hooks (prefijo:
display) – renderizan contenido en posiciones especificas de la página. Tu método hook devuelve HTML. Ejemplo:displayHeader,displayProductAdditionalInfo - Action Hooks (prefijo:
action) – se disparan cuando algo sucede. Tu método hook ejecuta lógica pero no devuelve nada visible. Ejemplo:actionCartSave,actionOrderStatusPostUpdate
Front Office Display Hooks
Estructura de la página
displayHeader– dentro de<head>. Agrega CSS, meta tags, referencias JS. Se dispara en cada página del front.displayTop/displayNavFullWidth– area de navegación superior. Banners, anuncios.displayHome– area de contenido de la página de inicio. Productos destacados, sliders, promociones.displayFooter/displayFooterBefore– contenido del footer. Suscripcion al newsletter, sellos de confianza.
Pagina de producto
displayProductAdditionalInfo– debajo del boton de anadir al carrito. Estimaciones de entrega, alertas de stock.displayProductExtraContent– agrega pestanas a la página de producto. Devuelve un objetoPrestaShop\\PrestaShop\\Core\\Product\\ProductExtraContent.displayAfterProductThumbs– debajo de las imagenes del producto. Medios adicionales, vistas de 360 grados.displayProductListReviews– en los listados de productos, debajo de cada producto. Calificaciones con estrellas.
Carrito y Checkout
displayShoppingCartFooter– debajo de la tabla del carrito. Sugerencias de venta cruzada.displayPaymentReturn– página de confirmacion del pedido. Mensajes de agradecimiento, información de seguimiento.displayOrderConfirmation– también en la confirmacion del pedido. Scripts de tracking de analytics.
Action Hooks principales
Eventos del carrito
actionCartSave– se dispara despues de cualquier modificacion del carrito. Usalo para verificaciones de stock en tiempo real o recalculos de precios.actionCartUpdateQuantityBefore– antes de los cambios de cantidad. Te permite validar o bloquear el cambio.
Eventos de pedidos
actionValidateOrder– se dispara cuando se crea un pedido. Contiene el objeto de pedido completo, el carrito, el cliente y la moneda.actionOrderStatusPostUpdate– despues de un cambio de estado del pedido. Activar notificaciones, actualizar sistemas externos, ajustar stock.actionPaymentConfirmation– cuando el pago es confirmado. Diferente de la validación del pedido para métodos de pago diferido.
Eventos del cliente
actionCustomerAccountAdd– nuevo registro de cliente. Sincronizacion con CRM, envio de email de bienvenida.actionAuthentication– el cliente inicia sesion. Actualizar ultimo acceso, sincronizar datos de sesion.
Eventos del producto
actionProductSave– producto creado o actualizado. Sincronizar con feeds, actualizar caches.actionProductDelete– producto eliminado. Limpiar datos relacionados del módulo.actionUpdateQuantity– cambios en el nivel de stock. Activar alertas de stock bajo, actualizar disponibilidad.
Dynamic Hooks (PS 1.7.7+)
PrestaShop genera hooks dinamicamente basados en la entidad y la acción:
action{Entity}{Action}Before
action{Entity}{Action}After
Por ejemplo: actionProductFormBuilderModifier te permite agregar campos al formulario de edición de producto en el panel de administración.
El hook setMedia
actionFrontControllerSetMedia es el lugar correcto para registrar archivos CSS y JavaScript. A diferencia de displayHeader, se dispara antes de que la página se renderice y proporciona el contexto del controller: Para una visión menos técnica, lea nuestra guía sobre cómo los módulos se comunican con tu tienda a través de hooks. Un módulo de rendimiento puede identificar hooks lentos.
public function hookActionFrontControllerSetMedia($params)
{
$controller = $this->context->controller;
if ($controller instanceof ProductController) {
$this->context->controller->registerStylesheet(
'my-module-css',
'modules/' . $this->name . '/views/css/product.css'
);
}
}
Errores comunes
- Consultas pesadas en Display Hooks – los Display Hooks se disparan en cada carga de página. Cachea tus consultas o usa carga diferida.
- Registrar hooks que no usas – cada hook registrado agrega sobrecarga, incluso si el método no devuelve nada.
- Olvidar
registerHook()eninstall()– los hooks deben registrarse durante la instalación del módulo. Olvidar esto es la razon número 1 por la que los hooks no se disparan. - No verificar la clase del controller – si tu hook solo debe ejecutarse en páginas de producto, verifica
instanceof ProductControllerantes de trabajar.
Los hooks son poderosos pero requieren disciplina. Usa el hook correcto para la tarea correcta, manten tus métodos hook rápidos y siempre prueba con la cache activada para detectar problemas de rendimiento temprano. Nuestro módulo Checkout Revolution utiliza muchos de estos hooks para una experiencia de checkout optimizada.
Comentarios (2)
Dejar un comentario