TUTORIELS 
La "phplib" sous l'angle des templates
Célèbre ensemble de classes dédié au monde Php, "PhpLib" peut apporter beaucoup à votre site web. Nous nous intéressons particulièrement ici à la construction de "templates".  (18 octobre 2001)
 

Bien connue des développeurs Php, "la Phplib" est un ensemble de classes, complétant les fonctionnalités du langage sur lequel elle s'appuie. Dans le cas du Php3 par exemple, où les sessions ne sont pas disponibles en natif, la Phplib permet de combler un manque et d'implémenter ce système. En ce qui concerne le Php4, cette librairie peut là encore proposer ses services bien qu'elle soit le plus souvent couplée avec Php3.

Aperçu général

Pour celles et ceux d'entre vous qui ne connaîtraient pas la PhpLib, un tour d'horizon des fonctionnalités qu'elle propose n'est pas une mauvaise idée : Peut-être y trouverez-vous la brique manquante, "la killer application" qui permettra à votre site d'atteindre l'audience qu'il mérite :

- La classe "DB_Sql" permet de gérer les connexions à la base de données. Elle apporte un lot de fonctions dédiées au maniement des données. Plusieurs autres classes de la Phplib se reposent sur elle.
- Le rôle de la classe "Session" est évident, elle nécessite l'utilisation de la classe "DB_Sql".
- La classe "Auth" est utilisée pour authentifier un utilisateur propre à une session.
- La classe "Perm" ajoute la dimension de "droits" sur une session authentifiée. En toute logique cette classe se repose sur "Auth", "Session" et "DB_Sql".
- "Cart" permet de gérer un panier électronique, nécessite la classe "Session" pour fonctionner.
- Toutes les classes ne sont cependant pas interdépendantes les unes des autres : "Menu" est une classe indépendante permettant la génération de menus de navigation.
- "Template" est la classe que nous étudierons aujourd'hui, elle est également indépendante.

Si vous souhaitez tester les exemples qui vont suivre, il vous faudra télécharger puis installer la Phplib. Vous n'êtes pas obligé de configurer une base de données pour ce tutoriel.


Pourquoi utiliser un "template" ?

L'utilisation de templates sur votre site vous obligera à prévoir davantage ou vous souhaitez aller avant de commencer à coder, ce qui n'est pas un mal, avouons-le.
En modifiant ainsi notre façon de faire par rapport à une conception plus classique basée sur des <?echo("$ma_variable")?> au sein du code HTML par exemple, nous rendons notre code plus efficace, mais surtout nous contribuons à dissocier le code HTML du code PHP, ce qui permettra plus tard de changer le design du site en un clin d'oeil, ou presque.
De plus, les templates sont réutilisables et forment autant de composants qui s'assemblent selon notre guise.
Enfin, ce système permet à un monteur-intégrateur HTML de travailler sur un modèle de page, le template, pendant que le développeur se concentre sur son fichier PHP.

Si vous êtes un lecteur assidû du "JDN Développeurs", vous connaissez déjà la solution nommée "FastTemplate", disponible également pour le langage Php. L'utilisation de la Phplib pour gérer des templates est différente (notamment pour sa gestion des blocs) bien que faisant appel à des principes communs.

Notre premier template

Voyons tout de suite à quoi ressemble ce système. Comme nous le disions, nous allons devoir dissocier notre code php du code HTML situé dans le template.
Voici à quoi ressemble notre template :

(jdn_template.txt)
<br>
     Aujourd'hui nous étudions les {technique}, disponibles dans la {librairie}.
<br>

Rien de plus simple, nous avons crée un fichier ".txt" (l'extension n'a pas d'importance), dans lequel nous avons inséré des balises : {titre}, {technique}, {librairie}. Ce sont ces expressions entre accolades dont nous allons maintenant nous occuper dans notre fichier Php :

(phplib_template.php3)
<?
     include('php/prepend.php3');

     $technique = "templates";
     $librairie = "Phplib";

     $t = new Template("php/");
     $t->set_file("FileRef","jdn_template.txt");
     $t->set_var("technique_templ",$technique);
     $t->set_var("librairie_templ",$librairie);
     $t->parse("Sortie","FileRef");
     $t->p("Sortie");
?>

Nous obtenons à l'écran :
Aujourd'hui nous étudions les templates, disponibles dans la Phplib.

Ce dernier fichier mérite quelques explications :
Le "include" n'est pas obligatoire, cela dépend de la façon dont vous avez installé / configuré votre Phplib, sous hébergement mutualisé ou pas notamment :

Afin d'activer la classe "Template" vous devez spécifier dans votre fichier "prepend.php3" (contenu dans le répertoire dans lequel vous avez installé la Phplib), la ligne :

require($_PHPLIB["libdir"] . "template.inc");

... ceci afin de permettre de disposer des fonctionnalités apportées par cette classe, qui n'est pas incluse par défaut dans le fichier "prepend.php3".

Nous initialisons ensuite les trois variables qui nous servirons à alimenter nos balises situées dans le template. Nous le verrons par la suite, celle-ci pourront être définies dynamiquement.
Phplib nécessite l'utilisation d'objets. Nous devons donc créer une instance de notre template grâce à "new Template", le répertoire "php" ici indiqué correspond au répertoire (subjectif) d'installation de la Phplib.

Notre template instancié, il nous faut maintenant lier le fichier physique ("jdn_template.txt") à une "référence" afin de pouvoir le manipuler par la suite.
Vient alors le "chargement" des valeurs que nous souhaitons attribuer à nos balises. La fonction "set_var" associe nos variables locales aux balises du template.
C'est seulement ensuite que le template est "chargé" via sa référence, et "parsé" (analyse syntaxique): les balises qu'il contient vont être recherchées puis remplacées par les valeurs que nous leur avons fait correspondre grâce à "set_var".

A ce moment, rien n'est encore affiché, c'est l'objet de la fonction print ("p"). Elle affiche le résultat final du parsing stocké dans la variable "Sortie".
A noter que nos dernières lignes peuvent être remplacées par la fonction "pparse" :

 $t->pparse("Sortie","FileRef");

Les templates imbriqués

Nous évoquions tout à l'heure la possibilité de réutiliser ses templates. Il y a bien sûr plusieurs façons de faire, mais en voici déjà une à base de templates imbriqués. Nous reprenons notre exemple précédent, mais cette fois-ci un second template va profiter du "résultat" obtenu après le "parsing" du premier template :

(jdn_template2.txt)
{Sortie}
Voici quelques exemples concrets d'utilisation de cette librairie.
<br>

Nous avons donc ici une template équivalente à celle que nous avons déjà rencontrée, notez la balise {Sortie}, elle reprend le nom de la variable qui contient le résultat final du parsing de notre exemple précédent.
Nous allons l'utiliser :

(phplib_template2.php3)
<?
     include('php/prepend.php3');

     $technique = "templates";
     $librairie = "Phplib";

     $t = new Template("php/");
     $t->set_file("FileRef","jdn_template.txt");
     $t->set_var("technique_templ",$technique);
     $t->set_var("librairie_templ",$librairie);
     $t->parse("Sortie","FileRef");

     // Toute la partie ci-dessus est commune à l'exemple précédent
     // La dernière instruction "parse" n'est pas suivie d'un affichage pour l'instant

     $t->set_file("FileRef2","jdn_template2.txt");
     $t->parse("Sortie2","FileRef2");
     $t->p("Sortie2");
?>

Grâce à ces trois dernières lignes de code, notre second template va pouvoir réutiliser la variable "Sortie" lors de son "parsing".
Nous obtenons à l'écran :

Aujourd'hui nous étudions les templates, disponibles dans la Phplib.
Voici quelques exemples concrets d'utilisation de cette librairie.

Les blocs

Les blocs permettent de définir un intervalle dans lequel il est possible d'effectuer des boucles par exemple. En voici un échantillon :

(jdn_template3.txt)
<p>Voici quelques technologies "server-side" :</p>

<table border="0" cellpadding="0" cellspacing="0">
     <!-- BEGIN Techno -->
     <tr>
          <td>{nom_techno}</td>
     </tr>
     <!-- END Techno -->
</table>

Les marqueurs BEGIN et END sont obligatoires, suivis du nom que l'on souhaite donner au bloc. Nous allons maintenant renseigner la balise {nom_techno} dynamiquement :

(phplib_template3.php3)
<?
include('php/prepend.php3');

$t = new Template("php/");
$t->set_file('FileRef', 'jdn_template3.txt');
$t->set_block('FileRef', 'Techno', 'Tbloc');

$technoliste=array(0 => 'Php', 1 => 'ASP', 2 => 'Cold Fusion');

for ($i=0; $i<3; $i++)
{
     $t->set_var('nom_techno', $technoliste[$i]);
     $t->Parse('Tbloc', 'Techno', true);
}

$t->pparse('Sortie', 'FileRef');
?>

La nouveauté ici se situe dans l'utilisation de "set_block". Cette fonction remplace pour un fichier donné (ici désigné par "FileRef") l'ensemble du bloc ("Techno" ici) par une variable template, "Tbloc", exploitable désormais comme n'importe quelle autre variable.

On définit ensuite un tableau pour contenir les données que nous allons utiliser... Puis nous attribuons dynamiquement à la balise {nom_techno} sa valeur. On retrouve ici nos deux fonctions, "set_var" et "parse" qui jouent le même rôle qu'auparavant.

Sachez enfin que des blocs peuvent s'inclure, il faut dans ce cas, impérativement, appliquer la fonction "set_block" en premier au bloc le plus "encapsulé".

Voilà pour les quelques fonctionnalités de base contenues dans la classe "Template" de cette librairie. Si Php a rajouté à son arsenal de fonctions dans sa version 4 la gestion des sessions (moins complète toutefois que celle proposée par Phplib), la Phplib est loin d'être obsolète, surtout pour les sites qui tournent encore sous Php3.

 
[ Arnaud GadalJDNet
 
Accueil | Haut de page