---
title: "Hooks en templates Smarty — {hook h='...'}"
section: themes
slug: hooks-templates
description: "Como usar hooks en templates Smarty de PrestaShop: sintaxis {hook}, posiciones dinamicas, hooks de display mas usados en FO y como depurarlos."
keywords: prestashop hook smarty template tpl hook h display front office posiciones dinamicas
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/themes/hooks-templates"
---

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

> Como usar hooks en templates Smarty de PrestaShop: sintaxis {hook}, posiciones dinamicas, hooks de display mas usados en FO y como depurarlos.

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 <head> (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
```


---

*Fuente: [https://ayudaprestashop.es/themes/hooks-templates](https://ayudaprestashop.es/themes/hooks-templates). Version Markdown generada automaticamente para consumo por LLMs.*
