-
Notifications
You must be signed in to change notification settings - Fork 0
SmartyTool
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
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',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.
- 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/).
- 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;
}- 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');
}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} |
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.