> For the complete documentation index, see [llms.txt](https://akyos.gitbook.io/book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://akyos.gitbook.io/book/prestashop/detail-du-theme/templating-smarty.md).

# Templating Smarty

### Documentation officielle

:pushpin:  Vous pouvez retrouver la documentation complète et officielle de smarty [ici](https://www.smarty.net/docsv2/fr/)

### Introduction

Smarty est le moteur de templates utilisé par PrestaShop pour générer le HTML des pages front.

### Les bases

Une variable Smarty commence par $. On peut accéder à des tableaux, des index, des propriétés d’objet et parfois à certaines méthodes selon le contexte. Toutes les balises Smarty sont entourées de délimiteurs. Par défaut, ils sont `{` et `}`  Exemples :

```html
{$product.name}
{$product.price}
{$customer.firstname}
```

Pour retrouver toutes les variables que propose Prestashop, vous pouvez utiliser `{debug}` , cela va ouvrir une popup avec toutes les variables disponibles.&#x20;

Vous pouvez aussi faire un `{dump($product}}` pour voir ce que contient `$product` .

### Conditions et boucles

Les boucles sont très intéressantes dans le traitement des donnés afin de les afficher. Toutes les boucles en php sont présentes dans smarty via des directives, comme {foreach}, {for}, ou encore {while}. Attention, les opérateurs ternaires n'existent pas.

```html
{if $product.show_price}
    {$product.price}
{/if}

{foreach from=$listing.products item=product}
    {$product.name}
{/foreach}
```

### Modificateurs Smarty

Les modificateurs sont de petites fonctions appliquées à une variable avant son affichage. Ils s’utilisent avec le caractère <kbd>|</kbd> et peuvent être chaînés. Ils acceptent éventuellement des paramètres.

```html
{$product.name|escape:'html'}
{$product.description|truncate:120}
{$customer.firstname|lower}
```

### Extensions Smarty

Prestashop fournis quelques fonctions et modificateurs Smarty. Voici la documention officielle : <https://devdocs.prestashop-project.org/9/development/components/smarty-extensions/> <br>

Les plus utilisés sont :&#x20;

* `form_field` ⇒ Aide à construire un formulaire
* `hook` ⇒ Pour exécuter un hook
* `l` ⇒ Utilisé pour traduire une string
* `widget` ⇒ Pour afficher le contenu d’un module directement dans le template.

### include, extends, block : quand utiliser quoi

* `include` sert à insérer un sous-template ;
* `extends` sert à hériter d’un template parent ;
* `block` sert à définir ou redéfinir une zone de contenu dans une hiérarchie de templates.

Si le fichier est un composant réutilisable, on pense souvent à **include**. Si on modifie une page dérivée d’une structure commune, on pense plutôt à **extends + block.**
