Lorsqu’un développeur créé son site web, il doit se poser pleins de questions avant de se lancer (enfin c’est mieux de le faire avant). L’une d’entre elle devrait être « vais-je utiliser des templates, et si oui que moteur conviendrais ? ».
Smarty est un moteur de template très connu et reconnu, et très complet. Peut être trop complet pour certains.
Idéalement, on utilise un moteur de template qui dispose des fonctionalités qu’on attend, et pas plus. Mais rien ne vous empêche d’utiliser Smarty pour tous vos projets, pour garder une trame de développement commune.
Qu’est ce qu’un template ?
Sans vous sortir une définition que vous trouverez aisément sur la toile, je vais tâcher de faire clair et simple.
Utiliser des templates vous permet de clarifier votre code, en séparant le code HTML du code PHP.
Alors oui, c’est pas sa seule fonction, mais c’est celle qui saute aux yeux. Il y a d’autres avantages, et quelques inconvénients selon votre point de vue.
La différence avec et sans template
Je prends ici en exemple une page on ne peut plus basique, et incomplète. C’est pour l’exemple.
Quand on utilise pas de template, on retrouve donc le code HTML et PHP en commun dans notre fichier
index.php
<?php session_start(); $pseudo = 'James'; ?> <!DOCTYPE html> <html lang="fr"> <head> <title>Mon site</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script> function afficherBienvenue() { alert('Bienvenue sur mon site'); } </script> </head> <body> <div> <p>Vous vous appelez <?php echo $pseudo; ?></p> </div> </body> </html>
Si vous utilisez smarty, votre fichier serait découpé en 2 fichiers : index.php et index.tpl.
index.php
<?php session_start(); require('smarty/Smarty.class.php'); $tpl = new Smarty(); $pseudo = 'James'; $tpl->assign(array( 'titre' => 'Mon site', 'pseudo' => $pseudo )); $tpl->display('index.tpl'); ?>
index.tpl
<!DOCTYPE html> <html lang="fr"> <head> <title>{$titre}</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> {literal} <script> function afficherBienvenue() { alert('Bienvenue sur mon site'); } </script> {/literal} </head> <body> <div> <p>Vous vous appelez {$pseudo}</p> </div> </body> </html>
Et voilà le travail !
Le résultat est le même avec et sans template. Enfin le résultat visuel.
Ce que vous devez faire pour utiliser Smarty :
- Télécharger Smarty
- Inclure la classe smarty dans vos fichiers
- Créer un objet smarty (ici $tpl)
- Assigner vos variables php dans smarty avec $tpl->assign()
- Entourer vos morceaux de code javascript avec {literal}{/literal}
- Créer un dossier templates pour y placer vos fichiers .tpl
- Créer un dossier templates_c pour le cache de smarty (accessible en écriture)
Référez vous à la documentation de Smarty pour des informations plus complètes.
Pour aller un peu plus loin
Il est préférable pour votre projet de créer un fichier global.php (ou un autre nom, c’est égal) qui sera inclus dans tous les autres. Ainsi, vous pouvez faire appel à la classe smarty et créer l’objet smarty dans ce fichier, et il sera inclus dans tous les autres.
Aussi, il est préférable d’avoir un fichier header.tpl (qui va contenir l’entete html, les scripts, le css et votre menu par exemple) et un fichier footer.tpl (qui va contenir notamment les fermetures de balises ouvertes dans le header).
En structurant ainsi votre site, vous n’aurez qu’a modifier les fichiers communs à toutes vos pages pour modifier toutes vos pages. Votre développement en sera grandement simplifié.
Cela devrait vous donner une structure qui ressemble à ça :
<?php /* On inclus notre fichier global Il y a dedans : - le session_start() - l'inclusion de smarty - l'objet $tpl de smarty - ... */ require './global.php'; $pseudo = 'James'; $tpl->assign(array( 'titre' => 'Mon site', 'pseudo' => $pseudo )); $tpl->display('header.tpl'); $tpl->display('index.tpl'); $tpl->display('footer.tpl'); ?>
Bien entendu, Smarty est capable de plus, beaucoup plus. Gestion du cache, variables, boucles, debug… Il y a tellement de fonctionalités disponible, que je ne vais pas toutes les citer.