Salut,
Voici un tout petit moteur de templates qui ne fait pas grand chose, mais qui le fait bien et vite.
Il a deux fonctionnalités principales :
- il parse des fichiers de template (encore heureux)
- il est capable de gérer des boucles avec des tableaux ou des itérateurs
Le parser n'utilise qu'une seule fonction str_replace, ce qui suffit bien pour tout faire.
On peut soit afficher le fichier parsé, soit récupérer le résultat dans une variable.
Concernant les fonctionnalités :
- les boucles : la méthode LighTemplate::fetchLoop() (ainsi que sa copine LighTemplate::displayLoop()) prend entre autres arguments un tableau ou un itérateur qui est parcouru par la boucle ; le fichier parsé l'est autant de fois qu'il y a d'éléments (facilement utilisable avec un jeu de résultat de requête de base de données)
- les conditions : que nenni => ça peut se gérer en PHP. Il suffit d'assigner à une variable de template une chaine vide pour que la variable ne soit pas affichée
- l'inclusion de fichiers : que nenni => on peut récupérer un fichier parsé dans une variable et l'assigner à une variable de template
- le cache : pas encore... C'est prévu, mais il faut que je m'assure que ce sera vraiment intéressant à implémenter en terme de performances (parce que j'ai des doutes...)
- des plugins : ce n'est pas d'actualité, on risque d'y perdre sérieusement en performances. Je préfère à la limite implémenter des fonctions natives désactivables et entièrement contrôlables par le développeur, plutôt que de charger des fonctions à la volée, ou utiliser des PCRE.
Par défaut, les variables de template sont de la forme : {_%s_} (format de sprintf())
Par exemple : {_titre_}
On peut changer le format à tout moment dans l'exécution du script, ce qui permet d'utiliser des formats différents d'un template à l'autre (je sais pas si c'est utile, mais on peut, ça mangeait pas de pain de le faire)
Par exemple, pour un format de variable de type Smarty :
$LighTemplate -> format_var = '{$%s}';
Lors de l'assignation des variables, seul la valeur de %s doit être passée en argument, c'est le moteur qui se charge de mettre en forme selon le format;
Contrairement à d'autres classes que j'ai trouvé ici ou là (j'en ai vu une sympa sur phpCS), le moteur se comporte comme un moteur indépendant : il n'est pas lié à un fichier (moi ça me parait logique...). Résultat : un seul objet, donc moins de ressources consommées.
Ci-dessous, un exemple d'utilisation