TUTORIELS 
Manipuler des modèles de page en PHP
Utiliser une classe PHP pour séparer présentation (code HTML) et logique (contenu dynamique).  (28 septembre 2001)
 

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 "\").

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page