⚡ Hooks en templates Smarty — {hook h='...'}

Actualizado: 2024-12-01

Los templates Smarty de PrestaShop usan la funcion {hook} para llamar a los hooks de display. Esto permite que los modulos inyecten contenido en cualquier punto del tema sin modificar el template.

#Sintaxis basica de {hook}

Sintaxis de {hook} en templates Smarty
smarty
{* Llamada basica a un hook *}
{hook h='displayBanner'}

{* Con parametros adicionales para los modulos *}
{hook h='displayProductAdditionalInfo' product=$product}

{* Guardar el resultado en una variable *}
{capture assign='banner_content'}{hook h='displayBanner'}{/capture}
{if $banner_content}
  <div class="banner-wrapper">{$banner_content nofilter}</div>
{/if}

{* En Twig (BO moderno) — equivalente con widget *}
{{ widget('module_name', 'hook_name') }}

{* Comprobar si hay modulos enganchados antes de renderizar un contenedor *}
{assign var='headerContent' value={hook h='displayTop'}}
{if $headerContent}
  <header class="site-header">{$headerContent nofilter}</header>
{/if}

#Hooks de display del Front Office

HookPosicion en la pagina
displayHeaderDentro del (CSS/JS)
displayTopBarra superior sobre el menu
displayBannerBanner superior (debajo del top)
displayNav1Primera barra de navegacion
displayNav2Segunda barra de navegacion
displayNavFullWidthBarra de navegacion ancho completo
displayHomeContenido principal de la home
displayFooterZona del footer
displayFooterBeforeAntes del footer principal
displayFooterAfterDespues del footer principal
displayLeftColumnColumna izquierda (en paginas con sidebar)
displayRightColumnColumna derecha
displayWrapperTopEncima del wrapper de contenido
displayWrapperBottomDebajo del wrapper de contenido
displayContentWrapperTopDentro del wrapper, arriba
displayNotFoundEn la pagina 404

#Hooks en las principales paginas

PaginaHooks especificos
Ficha de productodisplayProductAdditionalInfo, displayProductButtons, displayProductPriceBlock, displayProductTab, displayProductTabContent, displayReassurance
Listado / CategoriadisplayProductListFunctionalButtons, displayAfterProductThumbnail, displayProductListReviews
CarritodisplayShoppingCartFooter, displayCartExtraProductActions, displayBeforeCarrier
CheckoutdisplayPaymentTop, displayPaymentReturn, displayOrderConfirmation, displayOrderDetail
Pagina de clientedisplayCustomerAccount, displayMyAccountBlock, displayMyAccountBlockFooter
BusquedadisplaySearchTop, displaySearchBottom

#Posiciones dinamicas (widget)

Usar widget para incluir un modulo especifico
smarty
{* Incluir un modulo especifico en cualquier posicion del template *}
{* Sin necesidad de registrar en un hook especifico *}

{* Sintaxis: {widget module='nombre_modulo' hook='nombre_hook'} *}
{widget module='ps_categoryproducts' hook='displayHome'}

{* Con parametros *}
{widget module='ps_featuredproducts' hook='displayHome' category='3' nb='8'}

{* Llamar al widget solo si el modulo esta instalado y activo *}
{if Module::isInstalled('ps_featuredproducts') && Module::isEnabled('ps_featuredproducts')}
  {widget module='ps_featuredproducts' hook='displayHome'}
{/if}

{* En Smarty esto equivale a llamar manualmente al modulo: *}
{* Module::hookExec('displayHome', ['...'], Module::getInstanceByName('ps_featuredproducts')->id) *}

#Depurar hooks en templates

Depurar que modulos estan enganchados a cada hook
php
<?php

// Obtener todos los modulos en un hook especifico
$modules = Hook::getModulesFromHook(Hook::getIdByName('displayHome'));
foreach ($modules as $module) {
    echo $module['name'] . PHP_EOL;
}

// Verificar si un modulo esta en un hook
$isRegistered = Hook::isModuleRegisteredOnHook(
    Module::getInstanceByName('ps_featuredproducts'),
    'displayHome',
    Context::getContext()->shop->id
);

// Listar todos los hooks disponibles en PS
$allHooks = Hook::getHooks();

// En development — debug de hooks con la barra de Symfony
// Activar en config/parameters.php:
// 'kernel.debug' => true
// La toolbar mostrara los hooks ejecutados en cada request
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.