Après avoir installé PhpBB, je me suis un peu intéressé à "comment c'est fait ce truc"... Et là, grande surprise : "c'est où que c'est affiché les choses??? O_o"...
Après quelques recherches, je suis tombé sur leur fichier Template.php. J'ai donc décidé de prendre en main ce type de programmation et me l'approprier.
Evolution du projet
- Version 1.0 :
- Première chose : afficher quelque chose dans une page HTML, là pas de problème, j'utilise le même principe que PhpBB et je met en place des variables de templates
- Ensuite : permettre les insertions en boucles, ici aussi j'utilise quelque chose du même type que PhpBB avec un indicateur de début de boucle et de fin
- Ensuite : les conditions... A tient on peut déjà faire ça avec les boucles ^_^ => pas de problème, pas de changement.
- Dernier soucis : les boucles imbriquées... La seule solution que j'avais trouvé à ce moment là était de mettre le contenu de la seconde boucle dans un autre fichier de template et de récupérer le contenu compilé pour l'insérer à l'endroit voulu... plutôt lourd, mais ça marche.
- Première chose : afficher quelque chose dans une page HTML, là pas de problème, j'utilise le même principe que PhpBB et je met en place des variables de templates
- Version 2.0 :
- Une grande évolution à été faite pour cette version avec la gestion complète des boucles imbriquées à un niveau indéfini : le code est récursif, on peut donc imbriquer autant de boucles qu'on veut. Inconvénient : la création des sources de données dans la template est assez lourde et demande de la rigueur dans la programmation (au risque de voir le programme boucler indéfiniment)
- Quelques Bugs d'affichage ont également été corrigés
- Une grande évolution à été faite pour cette version avec la gestion complète des boucles imbriquées à un niveau indéfini : le code est récursif, on peut donc imbriquer autant de boucles qu'on veut. Inconvénient : la création des sources de données dans la template est assez lourde et demande de la rigueur dans la programmation (au risque de voir le programme boucler indéfiniment)
- Version 3.0 (Actuelle) :
- Jusqu'à maintenant les interfaces ne s'affichaient qu'une bonne fois pour toutes à la fin de l'exécussion du programme. Ce fait était un peu gênant pour les scripts mettant du temps à s'exécuter. J'ai donc prévu une toute autre syntaxe des fichiers de templates (syntaxe par blocs) pour permettre un affichage en temps réel des informations.
- Cette nouvelle syntaxe étant incompatible avec la version de template précédente, j'ai fais en sorte qu'on puisse créer des fichiers de templates "ibrydes" qui vont pouvoir soit s'afficher en temps réel, soit s'afficher en un bloc à la fin
- Inconvénient du temps réel : l'affichage des données se fait lors de leur enregistrement, il faut donc une certaine rigueur dans la programmation pour afficher le contenu de la manière que l'on souhaite.
- Jusqu'à maintenant les interfaces ne s'affichaient qu'une bonne fois pour toutes à la fin de l'exécussion du programme. Ce fait était un peu gênant pour les scripts mettant du temps à s'exécuter. J'ai donc prévu une toute autre syntaxe des fichiers de templates (syntaxe par blocs) pour permettre un affichage en temps réel des informations.
- Version 3.2.1 (En projet) :
- Pour une meilleure simplicité d'utilisation de la classe, je pense à améliorer la gestion des boucles imbriquées
Site dont l'affichage est géré par ce système de templates
Exemples de syntaxe :
- Code: Tout sélectionner
fichier.tpl
Partie ayant une syntaxe par blocs pour permettre un affichage en temps réel :
<!-- BEGIN_BLOCKS -->
<!-- BEGIN block1 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<LINK href="style.css" rel="stylesheet" type="text/css" >
<title>Mon titre</title>
</head>
<body>
<table border="1">
<!-- END block1 -->
<!-- BEGIN block2 -->
<tr>
<td>{CONTENU}</td>
</tr>
<!-- END block2 -->
<!-- BEGIN block3 -->
</table>
</body>
</html>
<!-- END block3 -->
<!-- END_BLOCKS -->
Partie ayant une syntaxe normale, pour que le fichier de templates soit ibryde. (Les 2 parties doivent faire la même chose)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<LINK href="style.css" rel="stylesheet" type="text/css" >
<title>Mon titre</title>
</head>
<body>
<table border="1">
<!-- BEGIN boucle -->
<tr>
<td>{CONTENU}</td>
</tr>
<!-- END boucle -->
</table>
</body>
</html>
- Code: Tout sélectionner
fichier_real_time.php
<?php
include("template.php");
$tpl=new Template("fichier.tpl"); // Affichage du header
$tpl->setBlockVars("block1", array());
for($i=0; $i<1000; $i++) // Affichage du tableau
$tpl->setBlockVars("block2", array("CONTENU" => "$i"));
$tpl->setBlockVars("block3", array()); // Affichage du footer
/* On peut remarquer ici qu'on aurait pu facilement afficher les blocks dans le mauvais ordre, ce qui aurait pu modifier l'interface. Cette fonctionnalitée n'est pas conseillée pour les sites lourds mais plutôt pour de petits scripts nécessitant beaucoup d'affichage. */
?>
- Code: Tout sélectionner
fichier_normal.php
<?php
include("template.php");
$tpl=new Template("fichier.tpl");
for($i=0; $i<1000; $i++) // Renseignement du tableau
$tpl->setLoopVar("boucle", array("CONTENU" => "$i"));
$tpl->parse(); // Affichage de la page
/* On voit bien ici que l'utilisation des templates hors temps réel est beaucoup plus aisée et robuste. */
?>
Les sources et la doc technique ici