PrestaShop Smarty vs Twig : Ce qui change dans les templates
La transition du moteur de templates dans PrestaShop
PrestaShop traverse l'un des changements architecturaux les plus significatifs de son histoire récente — la migration de Smarty vers Twig comme moteur de templates principal. Cette transition, commencée avec PrestaShop 1.7 et ayant atteint une étape majeure avec PrestaShop 9.0 (publié en juin 2025), affecte chaque développeur, designer de thème et créateur de module travaillant avec la plateforme.
Comprendre ce changement est essentiel que vous mainteniez une boutique existante, planifiiez une mise à niveau ou développiez de nouveaux modules et thèmes. Ce guide couvre ce qui a changé, ce qui change encore et comment préparer vos projets PrestaShop pour l'ère Twig.
Que sont Smarty et Twig ?
Smarty - Le moteur historique
Smarty est un moteur de templates PHP qui fait fonctionner PrestaShop depuis ses débuts. Il sépare la logique métier PHP de la présentation HTML.
Caractéristiques principales de Smarty -
- Les fichiers templates utilisent l'extension
.tpl - Les variables sont accédées avec des accolades et des signes dollar -
{$variable} - Les modificateurs utilisent la syntaxe pipe -
{$variable|escape:'html'} - Les blocs utilisent des balises appariées -
{block name='content'}{/block} - L'héritage de templates via
{extends file='parent.tpl'}
Twig - Le moteur moderne
Twig est le moteur de templates construit par SensioLabs, la même entreprise derrière le framework Symfony. Puisque PrestaShop a progressivement adopté les composants Symfony, passer à Twig est un alignement naturel.
Caractéristiques principales de Twig -
- Les fichiers templates utilisent l'extension
.html.twig - Les variables utilisent des doubles accolades -
{{ variable }} - Les filtres utilisent la syntaxe pipe -
{{ variable|escape('html') }} - Les blocs utilisent des balises appariées -
{% block content %}{% endblock %} - L'héritage de templates via
{% extends 'parent.html.twig' %}
Comparaison de syntaxe - Côte à côte
Afficher des variables
| Fonctionnalité | Smarty | Twig |
|---|---|---|
| Variable simple | {$product.name} | {{ product.name }} |
| Accès tableau | {$products[0].name} | {{ products[0].name }} |
| Méthode objet | {$product->getName()} | {{ product.getName() }} |
| Valeur par défaut | {$var|default:'N/A'} | {{ var|default('N/A') }} |
Structures de contrôle
<!-- Smarty: if/else -->
{if $product.active}
<span class="badge badge-success">Actif</span>
{elseif $product.pending}
<span class="badge badge-warning">En attente</span>
{else}
<span class="badge badge-danger">Inactif</span>
{/if}
<!-- Twig: if/else -->
{% if product.active %}
<span class="badge badge-success">Actif</span>
{% elseif product.pending %}
<span class="badge badge-warning">En attente</span>
{% else %}
<span class="badge badge-danger">Inactif</span>
{% endif %}Boucles
<!-- Smarty: boucle foreach -->
{foreach $products as $product}
<div class="product">
<h3>{$product.name}</h3>
<p>{$product.price|number_format:2:',':'.'}</p>
</div>
{foreachelse}
<p>Aucun produit trouvé.</p>
{/foreach}
<!-- Twig: boucle for -->
{% for product in products %}
<div class="product">
<h3>{{ product.name }}</h3>
<p>{{ product.price|number_format(2, ',', '.') }}</p>
</div>
{% else %}
<p>Aucun produit trouvé.</p>
{% endfor %}Ce qui a déjà changé - La chronologie
PrestaShop 1.7 (2016)
La migration a commencé. Le back office a commencé à adopter les contrôleurs Symfony avec des templates Twig. Le front office est resté entièrement basé sur Smarty.
PrestaShop 8.x (2022-2024)
Plus de pages du back office ont été migrées vers Symfony et Twig. Les pages admin clés comme Produits, Commandes et Clients ont été réécrites en Twig.
PrestaShop 9.0 (juin 2025)
Étape majeure. Le back office est maintenant entièrement migré vers les contrôleurs Symfony et les templates Twig. Cependant, Smarty est toujours présent car -
- Le front office (thèmes) utilise encore principalement Smarty
- De nombreux modules tiers utilisent encore des templates Smarty
- Les pages admin de modules utilisant des AdminControllers legacy reposent encore sur Smarty
Impact sur les propriétaires de boutiques
Si vous utilisez PrestaShop 1.7 ou 8.x
Rien ne change immédiatement. Vos thèmes et modules actuels continueront de fonctionner. Mais planifiez la mise à niveau éventuelle vers PrestaShop 9.0.
Si vous mettez à niveau vers PrestaShop 9.0
L'impact le plus significatif concerne les modules qui modifient les pages du back office. Vérifiez la compatibilité auprès des développeurs de modules avant la mise à niveau.
Impact sur les développeurs de modules
Templates admin de modules
Pour la compatibilité PrestaShop 8.x (approche legacy) -
class AdminMyModuleController extends ModuleAdminController
{
public function renderList()
{
$this->context->smarty->assign([
'my_data' => $this->getMyData(),
]);
return $this->display(__FILE__, 'views/templates/admin/list.tpl');
}
}Pour PrestaShop 9.0+ (approche moderne) -
class MyModuleAdminController extends FrameworkBundleAdminController
{
public function listAction(): Response
{
return $this->render('@Modules/mymodule/views/templates/admin/list.html.twig', [
'my_data' => $this->getMyData(),
]);
}
}Supporter plusieurs versions de PrestaShop
if (version_compare(_PS_VERSION_, '9.0.0', '>=')) {
return $this->render('@Modules/mymodule/admin/config.html.twig', $params);
} else {
$this->context->smarty->assign($params);
return $this->display($this->file, 'views/templates/admin/config.tpl');
}Avantages de Twig par rapport à Smarty
Meilleure sécurité
Twig échappe automatiquement les sorties par défaut, réduisant significativement les risques XSS.
<!-- Twig: échappé automatiquement par défaut -->
{{ user_input }} <!-- Entités HTML échappées automatiquement -->
{{ trusted_html|raw }} <!-- Explicitement marqué comme sûr -->
<!-- Smarty: échappement manuel nécessaire -->
{$user_input|escape:'html'} <!-- Doit penser à échapper -->
{$user_input} <!-- DANGEREUX: pas d'échappement -->Intégration Symfony
Twig s'intègre nativement avec le routage, le rendu de formulaires, le système de traduction et les composants de sécurité de Symfony.
Meilleurs messages d'erreur
Twig fournit des messages d'erreur clairs avec des numéros de ligne exacts.
Outillage moderne
Twig dispose d'un excellent support IDE avec coloration syntaxique, auto-complétion et linting dans PhpStorm, VS Code et autres éditeurs.
Motifs de migration courants
Traduire des chaînes
<!-- Smarty -->
{l s='Ajouter au panier' mod='mymodule'}
<!-- Twig -->
{{ 'Ajouter au panier'|trans({}, 'Modules.Mymodule.Shop') }}Rendu des hooks
<!-- Smarty -->
{hook h='displayProductButtons'}
<!-- Twig -->
{{ renderhook('displayProductButtons') }}Surcharges de templates back office dans PrestaShop 9
Dans PrestaShop 9.0, les modules peuvent surcharger les templates Twig du back office en recréant la même structure de répertoires -
# Emplacement de la surcharge du module
modules/mymodule/views/PrestaShop/Admin/Product/CatalogPage/catalog.html.twig{% extends '@PrestaShopCore/Admin/Product/CatalogPage/catalog.html.twig' %}
{% block product_catalog_tools %}
{{ parent() }}
<div class="my-custom-toolbar">
<!-- Contenu additionnel de la barre d'outils -->
</div>
{% endblock %}Conseils pratiques pour les propriétaires de boutiques
Ne paniquez pas
La migration est progressive. Smarty n'est pas supprimé du jour au lendemain.
Vérifiez la compatibilité des modules avant la mise à niveau
Avant de mettre à niveau vers PrestaShop 9.0, vérifiez que chaque module est compatible.
Envisagez une aide professionnelle pour les boutiques complexes
Avec des personnalisations étendues, engagez un développeur PrestaShop expérimenté en Smarty et Twig.
Testez tout dans un environnement de staging
Ne mettez jamais à niveau votre boutique en production directement.
Cette réponse vous a-t-elle été utile ?
Vous avez encore des questions ?
Can't find what you're looking for? Send us your question and we'll get back to you quickly.