ADR-003 - Moteur de Modèles
ADR-003: Moteur de Modèles (Smarty)
Section intitulée « ADR-003: Moteur de Modèles (Smarty) »Enregistrement de Décision Architecturale pour l’adoption par XOOPS du moteur de modèles Smarty.
Accepté - Décision centrale depuis XOOPS 2.0
En Évolution - Migration vers Smarty 4/5 prévue pour XOOPS 4.0
Contexte
Section intitulée « Contexte »XOOPS avait besoin d’une solution de modélisation qui :
- Sépare la présentation de la logique métier
- Permet aux concepteurs de thèmes de travailler sans connaissance PHP
- Supporte l’héritage de modèles et les inclusions
- Fournit la mise en cache pour les performances
- Enabler les modèles personnalisables par l’utilisateur
- Supporter l’internationalisation
Diagramme de Décision
Section intitulée « Diagramme de Décision »flowchart TB subgraph "PHP Layer" A[Module Controller] B[Template Variables] end
subgraph "Smarty Engine" C[Smarty Core] D[Template Compiler] E[Cache Manager] end
subgraph "Templates" F[Module Templates] G[Theme Templates] H[Block Templates] end
subgraph "Output" I[Compiled PHP] J[Cached HTML] K[Final HTML] end
A --> B B --> C C --> D C --> E D --> F D --> G D --> H F --> I G --> I H --> I E --> J I --> K J --> KDécision
Section intitulée « Décision »Nous utiliserons Smarty comme moteur de modèles car :
1. Séparation des Préoccupations
Section intitulée « 1. Séparation des Préoccupations »// PHP (Contrôleur) - Logique métier$items = $itemHandler->getPublishedItems();$xoopsTpl->assign('items', $items);
// Smarty (Vue) - Présentation// templates/items.tpl{* Smarty template - No PHP logic *}<{foreach item=item from=$items}> <article> <h2><{$item.title}></h2> <p><{$item.summary}></p> </article><{/foreach}>2. Délimiteurs XOOPS
Section intitulée « 2. Délimiteurs XOOPS »XOOPS utilise <{ et }> au lieu des standards { } :
{* Standard Smarty *}{$variable}
{* XOOPS Smarty - Avoids JavaScript conflicts *}<{$variable}>3. Hiérarchie des Modèles
Section intitulée « 3. Hiérarchie des Modèles »graph TB A[Theme Master Template<br>theme.html] --> B[Module Template<br>module_index.tpl] A --> C[Block Templates<br>block_*.tpl] B --> D[Partial Templates<br>_header.tpl] B --> E[Partial Templates<br>_footer.tpl]
style A fill:#f9f,stroke:#333 style B fill:#9ff,stroke:#333 style C fill:#ff9,stroke:#3334. Stockage des Modèles
Section intitulée « 4. Stockage des Modèles »- Base de Données: Modèles personnalisés stockés pour capacité de restauration
- Système de Fichiers: Modèles originaux dans répertoires de modules
- Cache: Modèles compilés pour les performances
Configuration de Smarty
Section intitulée « Configuration de Smarty »// XOOPS Smarty initialization$xoopsTpl = new XoopsTpl();
// Custom delimiters$xoopsTpl->left_delim = '<{';$xoopsTpl->right_delim = '}>';
// Caching$xoopsTpl->caching = XOOPS_TEMPLATE_CACHE;$xoopsTpl->cache_lifetime = 3600;
// Security$xoopsTpl->security_policy = new Smarty_Security($xoopsTpl);$xoopsTpl->security_policy->php_functions = [];$xoopsTpl->security_policy->php_modifiers = ['escape', 'count'];Conséquences
Section intitulée « Conséquences »- Convivial pour les Concepteurs: Syntaxe de type HTML
- Mise en Cache: Mise en cache des modèles intégrée
- Sécurité: Isolation du code PHP
- Flexibilité: Modificateurs, fonctions, plugins
- Personnalisation: Les utilisateurs peuvent modifier les modèles
- Communauté: Grand écosystème Smarty
- Courbe d’Apprentissage: Syntaxe spécifique à Smarty
- Surcharge: Étape de compilation requise
- Débogage: Les erreurs de modèle peuvent être cryptiques
- Problèmes de Version: Changements de rupture entre les versions
Atténuations
Section intitulée « Atténuations »- Apprentissage: Documentation complète
- Performance: Mise en cache agressive
- Débogage: Console de débogage, messages d’erreur clairs
- Versions: Couche de compatibilité dans XOOPS
Alternatives Envisagées
Section intitulée « Alternatives Envisagées »Pros: Moderne, écosystème Symfony Cons: Syntaxe différente, effort de migration Décision: Possible option future pour XOOPS 3.x
2. Blade (Laravel)
Section intitulée « 2. Blade (Laravel) »Pros: Syntaxe propre, populaire Cons: Spécifique à Laravel Décision: Non adapté pour une utilisation autonome
3. Modèles PHP Natifs
Section intitulée « 3. Modèles PHP Natifs »Pros: Pas de courbe d’apprentissage, rapide Cons: Risques de sécurité, pas de séparation Décision: Rejeté pour la maintenabilité
Décisions Connexes
Section intitulée « Décisions Connexes »- ADR-001: Architecture Modulaire
- ADR-002: Abstraction de Base de Données
Références
Section intitulée « Références »- Documentation Smarty: https://www.smarty.net/docs/en/
- Guide du Système de Modèles XOOPS
- Modèle MVC dans les Applications Web
#xoops #architecture #adr #smarty #templates #design-decision