⚡ 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
| Hook | Posicion en la pagina |
|---|---|
| displayHeader | Dentro del (CSS/JS) |
| displayTop | Barra superior sobre el menu |
| displayBanner | Banner superior (debajo del top) |
| displayNav1 | Primera barra de navegacion |
| displayNav2 | Segunda barra de navegacion |
| displayNavFullWidth | Barra de navegacion ancho completo |
| displayHome | Contenido principal de la home |
| displayFooter | Zona del footer |
| displayFooterBefore | Antes del footer principal |
| displayFooterAfter | Despues del footer principal |
| displayLeftColumn | Columna izquierda (en paginas con sidebar) |
| displayRightColumn | Columna derecha |
| displayWrapperTop | Encima del wrapper de contenido |
| displayWrapperBottom | Debajo del wrapper de contenido |
| displayContentWrapperTop | Dentro del wrapper, arriba |
| displayNotFound | En la pagina 404 |
#Hooks en las principales paginas
| Pagina | Hooks especificos |
|---|---|
| Ficha de producto | displayProductAdditionalInfo, displayProductButtons, displayProductPriceBlock, displayProductTab, displayProductTabContent, displayReassurance |
| Listado / Categoria | displayProductListFunctionalButtons, displayAfterProductThumbnail, displayProductListReviews |
| Carrito | displayShoppingCartFooter, displayCartExtraProductActions, displayBeforeCarrier |
| Checkout | displayPaymentTop, displayPaymentReturn, displayOrderConfirmation, displayOrderDetail |
| Pagina de cliente | displayCustomerAccount, displayMyAccountBlock, displayMyAccountBlockFooter |
| Busqueda | displaySearchTop, 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.