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.
|