La bonne gestion des modèles de pages est un atout considérable
pour certains programmes (ce constat n'est en effet pas toujours
vrai): en séparant la présentation du contenu, les
modèles de pages permettent de personnaliser l'interface,
ou de repenser celle-ci (pour l'adapter, le cas échéant,
à une nouvelle charte graphique) avec la plus grande facilité.
Les tâches sont par ailleurs mieux partagées entre
le webmaster et l'équipe de développement. Un précédent
article montrait comme manipuler des modèles de pages
(templates) en Perl: nous nous intéressons ici à
un autre langage de script, le php, et plus particulièrement
à un module de celui-ci: la classe FastTemplate.php3, disponible
en téléchargement à l'adresse suivante:
http://www.thewebmasters.net/php/
Premiers pas
Les modèles de pages sont des pages contenant du code
HTML et des "marqueurs" repérant les zones qui
recevront du contenu dynamique. Ces marqueurs seront caractérisés
par des noms de variables entre accolades: par exemple:
<HTML>
<BODY>
<P>
Votre numéro de client est {NUMCLIENT}
</P>
</BODY>
</HTML>
Les noms de variables peuvent contenir les caractères définis
par l'expression régulière suivante: {(A-Z0-9_)+}
(pour apprendre à décoder ce genre de formule, consulter
notre article qui leur
est consacré).
En php, on manipule des objets, auxquels ont doit assigner les fichiers
contenant du code HTML. On écrira donc par exemple:
include "class.FastTemplate.php3";
// le chemin de la classe doit figurer dans le fichier PHP.INI,
au sein de la variable
// d'environnement INCLUDE_PATH
$tpl = new FastTemplate("../templates");
$tpl->define(array(
"myTemplate" => "myTemplate.html"
));
// on peut définir plusieurs modèles de pages (tpl
est un tableau associatif)
Une fois le (ou les) modèles de pages définis, on
fera correspondre noms de variables entre accolades et variables
php par une instruction du genre:
$tpl->assign("NUMCLIENT", $num_client);
L'import des données dans les modèles de pages se
fait au moyen de la méthode parse(). Ceci est effectué
par la ligne suivante:
$tpl->parse(MAIN, "myTemplate");
où "MAIN" représente le modèle de
page "parent" (en cas de modèles multiples: voir
plus loin).
Enfin, on servira le contenu par:
$tpl->FastPrint();
FastTemplate et MySQL
Très simplement, si l'on veut récupérer,
par exemple, des numéros clients, on écrira:
mysql_connect (localhost, root, passwd);
mysql_select_db (essai);
$requete_sql = mysql_query ("SELECT num_client FROM donnees
WHERE nom = '$nom' ");
$donnees = mysql_fetch_array($requete_sql);
$num_client = $donnees["num_client"];
$tpl->assign("NUMCLIENT", $num_client);
$tpl->parse(MAIN, "myTemplate");
$tpl->FastPrint();
Modèles multiples
Nous reprenons ici l'exemple précédent:
include "class.FastTemplate.php3";
$tpl = new FastTemplate("../templates");
$tpl->define(array(
"myTemplate" => "myTemplate.html"
"tableau" => "tableau.html",
"lignes" => "lignes.html"
));
mysql_connect (localhost, root, passwd);
mysql_select_db (essai);
$requete_sql = mysql_query ("SELECT num_client FROM donnees");
if ($donnees = mysql_fetch_array($requete_sql)) {
do {
$num_client = $donnees["num_client"];
$tpl->assign("NUMCLIENT",
$num_client);
$tpl->parse(LIGNES,
".lignes");
} while ($donnees = mysql_fetch_array($requete_sql));
$tpl->parse(TABLEAU, "tableau");
$tpl->parse(MAIN, "myTemplate");
$tpl->FastPrint();
}
else {
print("Erreur");
}
Le modèle de page "lignes.html" ressemblera à:
<TR>
<TD>
{NUMCLIENT}
</TD>
</TR>
Le . devant "colonnes" dans l'instruction:
$tpl->parse(LIGNES, ".lignes");
indique une concaténation: on obtiendra une série
de cellules de tableau HTML. Ces cellules sont ensuite placées
dans un tableau défini par le modèle de page "tableau.html":
<TABLE>
{LIGNES}
</TABLE>
Enfin, ce tableau sera placé au sein de la page HTML principale,
définie par le modèle "myTemplate.html:"
<HTML>
<BODY>
<P>
Liste des numéros clients:
{TABLEAU}
</P>
</BODY>
</HTML>
Complément
Certaines versions de FastTemplate nécessite, avec
PHP4, la modication d'une ligne au sein de la fonction parse_template():
$template = ereg_replace("\{$key\}","$val","$template");
(les ajouts figurent en rouge: il s'agit de deux "\").
|