Skip to content
Gérits Aurélien edited this page Feb 18, 2026 · 2 revisions

SmartyTool est un gestionnaire de moteur de template basé sur Smarty v5. Il utilise un design pattern Multiton associé à un Registre de configuration. Cela permet d'isoler totalement plusieurs environnements (ex: un site public et un panneau d'administration) au sein d'une même instance de l'application, tout en évitant les conflits de cache et de compilation.

Namespace : Magepattern\Component\Tool\SmartyTool

Configuration (Registre)

Avant d'utiliser Smarty, vous devez enregistrer vos contextes. Cette étape se fait généralement dans votre fichier de démarrage (index.php ou Bootstrap).

Exemple de double configuration : Frontend & Admin

use Magepattern\Component\Tool\SmartyTool;

// 1. Configuration pour le FRONTEND
SmartyTool::registerContext('frontend', [
    'template_dir' => '/var/www/html/themes/site/templates',
    'plugins_dir'  => '/var/www/html/app/plugins/frontend',
    'debug'        => true // Vérifie les changements de templates
]);

// 2. Configuration pour l'ADMINISTRATION
SmartyTool::registerContext('admin', [
    'template_dir' => '/var/www/html/admin/views/templates',
    'compile_dir'  => '/var/www/html/var/smarty/compile/admin',
    'cache_dir'    => '/var/www/html/var/smarty/cache/admin',
    'escape_html'  => false // Désactive l'auto-escaping si nécessaire
]);

Utilisation en PHP Une fois les contextes enregistrés, l'appel dans vos contrôleurs est simplifié au maximum. SmartyTool se charge d'instancier la bonne version de Smarty avec les bons dossiers.

Utilisation du contexte Frontend

$smarty = SmartyTool::getInstance('frontend');
$smarty->assign('user_name', 'Client');
$smarty->display('home.tpl');

Utilisation du contexte Admin

$admin = SmartyTool::getInstance('admin');
$admin->assign('stats', $dashboardStats);
$admin->display('dashboard/overview.tpl');

Note sur les chemins Dans vos projets, il est recommandé d'utiliser une constante de racine (ex: _DIR_ROOT) plutôt que des chemins en dur pour garantir la portabilité entre votre environnement local (MAMP) et votre serveur de production :

'template_dir' => _DIR_ROOT . '/themes/site/templates',

Extensions & Plugins (Smarty 5)

Smarty 5 permet d'étendre les fonctionnalités du moteur via des dossiers de plugins. Pour garantir la portabilité et faciliter les mises à jour du framework, il est recommandé de placer vos plugins personnalisés dans les répertoires spécifiés lors de la configuration de vos contextes.

  1. Distinction des répertoires Plugins Global : /magepattern/package/smarty-plugins/ (Réservé aux outils natifs du framework).

Plugins Personnalisés : Dossiers définis dans votre configuration (ex: /app/plugins/frontend/ ou /app/plugins/admin/).

  1. Créer un "Modificateur" personnalisé (ex: format_price) Un modificateur transforme une variable. Il doit être placé dans votre dossier de plugins projet.

Fichier : modifier.format_price.php

Emplacement : /votre-projet/app/plugins/frontend/

<?php
/**
 * Plugin Smarty 5 : Modificateur de prix
 * Usage : {$total|format_price:'€'}
 */
function smarty_modifier_format_price($amount, $symbol = '$') {
    return number_format((float)$amount, 2, ',', ' ') . ' ' . $symbol;
}
  1. Créer une "Fonction" personnalisée (ex: current_year) Une fonction insère un contenu généré. Elle peut être partagée ou spécifique à un contexte.

Fichier : function.current_year.php

Emplacement : /votre-projet/app/plugins/frontend/

<?php
/**
 * Plugin Smarty 5 : Affiche l'année en cours
 * Usage : {current_year}
 */
function smarty_function_current_year($params, $smarty) {
    return date('Y');
}

Règles de nommage Smarty 5

Le moteur scanne les dossiers déclarés et cherche des fichiers correspondants à ce schéma précis :

Type Préfixe Fichier Préfixe Fonction PHP Appel Template
Fonction function.nom.php smarty_function_nom {nom}
Modificateur modifier.nom.php smarty_modifier_nom {$var|nom}
Bloc block.nom.php smarty_block_nom {nom}...{/nom}

Rappel de Configuration

Pour que ces fichiers soient détectés, assurez-vous que le chemin est correctement déclaré dans votre SmartyTool :

SmartyTool::registerContext('frontend', [
    'template_dir' => '/var/www/html/themes/site/templates',
    'plugins_dir'  => '/var/www/html/app/plugins/frontend', // <--- C'est ici que Smarty cherchera vos fichiers
]);

Cette structure garantit que lors d'une mise à jour de Magepattern, vos plugins personnalisés ne seront jamais écrasés.

Clone this wiki locally