Los hooks son la forma en que los modulos 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 pagina. Tu metodo hook devuelve HTML. Ejemplo:displayHeader,displayProductAdditionalInfo - Action Hooks (prefijo:
action) – se disparan cuando algo sucede. Tu metodo hook ejecuta logica pero no devuelve nada visible. Ejemplo:actionCartSave,actionOrderStatusPostUpdate
Front Office Display Hooks
Estructura de la pagina
displayHeader– dentro de<head>. Agrega CSS, meta tags, referencias JS. Se dispara en cada pagina del front.displayTop/displayNavFullWidth– area de navegacion superior. Banners, anuncios.displayHome– area de contenido de la pagina 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 pagina 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– pagina de confirmacion del pedido. Mensajes de agradecimiento, informacion de seguimiento.displayOrderConfirmation– tambien 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 validacion del pedido para metodos 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 modulo.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 accion:
action{Entity}{Action}Before
action{Entity}{Action}After
Por ejemplo: actionProductFormBuilderModifier te permite agregar campos al formulario de edicion de producto en el panel de administracion.
El hook setMedia
actionFrontControllerSetMedia es el lugar correcto para registrar archivos CSS y JavaScript. A diferencia de displayHeader, se dispara antes de que la pagina se renderice y proporciona el contexto del controller:
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 pagina. Cachea tus consultas o usa carga diferida.
- Registrar hooks que no usas – cada hook registrado agrega sobrecarga, incluso si el metodo no devuelve nada.
- Olvidar
registerHook()eninstall()– los hooks deben registrarse durante la instalacion del modulo. Olvidar esto es la razon numero 1 por la que los hooks no se disparan. - No verificar la clase del controller – si tu hook solo debe ejecutarse en paginas de producto, verifica
instanceof ProductControllerantes de trabajar.
Los hooks son poderosos pero requieren disciplina. Usa el hook correcto para la tarea correcta, manten tus metodos hook rapidos y siempre prueba con la cache activada para detectar problemas de rendimiento temprano.
Comentarios (2)
Dejar un comentario