PrestaShop Smarty vs Twig : Ce qui change dans les templates

388 vues

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éSmartyTwig
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.

Loading...
Back to top