PrestaShop Smarty vs Twig: Cosa cambia nei template

384 visualizzazioni

La transizione del motore di template in PrestaShop

PrestaShop sta attraversando uno dei cambiamenti architetturali più significativi della sua storia recente — la migrazione da Smarty a Twig come motore di template principale. Questa transizione, iniziata con PrestaShop 1.7 e che ha raggiunto una pietra miliare importante con PrestaShop 9.0 (rilasciato a giugno 2025), riguarda ogni sviluppatore, designer di temi e creatore di moduli che lavora con la piattaforma.

Comprendere questo cambiamento è essenziale che tu stia mantenendo un negozio esistente, pianificando un aggiornamento o sviluppando nuovi moduli e temi. Questa guida copre cosa è cambiato, cosa sta ancora cambiando e come preparare i tuoi progetti PrestaShop per l'era Twig.

Cosa sono Smarty e Twig?

Smarty - Il motore legacy

Smarty è un motore di template PHP che alimenta PrestaShop dai suoi inizi. Separa la logica di business PHP dalla presentazione HTML.

Caratteristiche principali di Smarty -

  • I file template usano l'estensione .tpl
  • Le variabili sono accessibili con parentesi graffe e segni di dollaro - {$variable}
  • I modificatori usano la sintassi pipe - {$variable|escape:'html'}
  • I blocchi usano tag accoppiati - {block name='content'}{/block}
  • Ereditarietà del template tramite {extends file='parent.tpl'}

Twig - Il motore moderno

Twig è il motore di template costruito da SensioLabs, la stessa azienda dietro il framework Symfony. Poiché PrestaShop ha progressivamente adottato i componenti Symfony, passare a Twig è un allineamento naturale.

Caratteristiche principali di Twig -

  • I file template usano l'estensione .html.twig
  • Le variabili usano doppie parentesi graffe - {{ variable }}
  • I filtri usano la sintassi pipe - {{ variable|escape('html') }}
  • I blocchi usano tag accoppiati - {% block content %}{% endblock %}
  • Ereditarietà del template tramite {% extends 'parent.html.twig' %}

Confronto della sintassi - Fianco a fianco

Output delle variabili

FunzionalitàSmartyTwig
Variabile semplice{$product.name}{{ product.name }}
Accesso array{$products[0].name}{{ products[0].name }}
Metodo oggetto{$product->getName()}{{ product.getName() }}
Valore predefinito{$var|default:'N/A'}{{ var|default('N/A') }}

Strutture di controllo

<!-- Smarty: if/else -->
{if $product.active}
  <span class="badge badge-success">Attivo</span>
{elseif $product.pending}
  <span class="badge badge-warning">In attesa</span>
{else}
  <span class="badge badge-danger">Inattivo</span>
{/if}

<!-- Twig: if/else -->
{% if product.active %}
  <span class="badge badge-success">Attivo</span>
{% elseif product.pending %}
  <span class="badge badge-warning">In attesa</span>
{% else %}
  <span class="badge badge-danger">Inattivo</span>
{% endif %}

Cicli

<!-- Smarty: ciclo foreach -->
{foreach $products as $product}
  <div class="product">
    <h3>{$product.name}</h3>
    <p>{$product.price|number_format:2:',':'.'}</p>
  </div>
{foreachelse}
  <p>Nessun prodotto trovato.</p>
{/foreach}

<!-- Twig: ciclo for -->
{% for product in products %}
  <div class="product">
    <h3>{{ product.name }}</h3>
    <p>{{ product.price|number_format(2, ',', '.') }}</p>
  </div>
{% else %}
  <p>Nessun prodotto trovato.</p>
{% endfor %}

Cosa è già cambiato - La cronologia

PrestaShop 1.7 (2016)

Inizio della migrazione. Il back office ha iniziato ad adottare controller Symfony con template Twig. Il front office è rimasto interamente basato su Smarty.

PrestaShop 8.x (2022-2024)

Più pagine del back office sono state migrate a Symfony e Twig.

PrestaShop 9.0 (giugno 2025)

Pietra miliare importante. Il back office è ora completamente migrato a controller Symfony e template Twig. Tuttavia, Smarty è ancora presente perché -

  • Il front office (temi) usa ancora principalmente Smarty
  • Molti moduli di terze parti usano ancora template Smarty
  • Le pagine admin dei moduli con AdminController legacy si basano ancora su Smarty

Impatto sui proprietari di negozi

Se usi PrestaShop 1.7 o 8.x

Nulla cambia immediatamente. I tuoi temi e moduli continueranno a funzionare. Pianifica l'eventuale aggiornamento a PrestaShop 9.0.

Se stai aggiornando a PrestaShop 9.0

L'impatto più significativo riguarda i moduli che modificano le pagine del back office. Verifica la compatibilità con gli sviluppatori dei moduli prima dell'aggiornamento.

Impatto sugli sviluppatori di moduli

Per compatibilità PrestaShop 8.x (approccio 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');
    }
}

Per PrestaShop 9.0+ (approccio moderno) -

class MyModuleAdminController extends FrameworkBundleAdminController
{
    public function listAction(): Response
    {
        return $this->render('@Modules/mymodule/views/templates/admin/list.html.twig', [
            'my_data' => $this->getMyData(),
        ]);
    }
}

Supportare più versioni di 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');
}

Vantaggi di Twig rispetto a Smarty

Migliore sicurezza

Twig effettua l'escape automatico dell'output per impostazione predefinita.

<!-- Twig: escape automatico per default -->
{{ user_input }}  <!-- Entità HTML escapate automaticamente -->
{{ trusted_html|raw }}  <!-- Esplicitamente marcato come sicuro -->

<!-- Smarty: escape manuale necessario -->
{$user_input|escape:'html'}  <!-- Devi ricordarti di escapare -->
{$user_input}  <!-- PERICOLOSO: nessun escape -->

Integrazione con Symfony

Twig si integra nativamente con routing, rendering dei form, sistema di traduzione e componenti di sicurezza di Symfony.

Migliori messaggi di errore

Twig fornisce messaggi di errore chiari con numeri di riga esatti.

Pattern di migrazione comuni

Traduzione di stringhe

<!-- Smarty -->
{l s='Aggiungi al carrello' mod='mymodule'}

<!-- Twig -->
{{ 'Aggiungi al carrello'|trans({}, 'Modules.Mymodule.Shop') }}

Rendering dei hook

<!-- Smarty -->
{hook h='displayProductButtons'}

<!-- Twig -->
{{ renderhook('displayProductButtons') }}

Override dei template back office in PrestaShop 9

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">
    <!-- Contenuto aggiuntivo della toolbar -->
  </div>
{% endblock %}

Consigli pratici per i proprietari di negozi

Non farti prendere dal panico

La migrazione è graduale. Smarty non verrà rimosso da un giorno all'altro.

Verifica la compatibilità dei moduli prima dell'aggiornamento

Prima di aggiornare a PrestaShop 9.0, verifica che ogni modulo sia compatibile.

Considera l'aiuto professionale per negozi complessi

Con personalizzazioni estese, assumi uno sviluppatore PrestaShop esperto sia in Smarty che in Twig.

Testa tutto in un ambiente di staging

Non aggiornare mai il tuo negozio in produzione direttamente.

Questa risposta ti è stata utile?

Hai ancora domande?

Can't find what you're looking for? Send us your question and we'll get back to you quickly.

Loading...
Back to top