L'un des aspects les plus fastidieux de la programmation CGI en
Perl consiste à harmoniser la présentation des pages
produites par les scripts avec celle de l'ensemble du site web dans
lequel elles s'inscrivent. Une méthode simple consiste à
utiliser les possibilités des Server Side Includes (SSI),
et notamment la commande #exec, mais tous les serveurs ne supportent
pas les SSI. Une autre manière de procéder de manière
efficace et rigoureuse est l'utilisation de modèles de page
(template). Cette technique permet de dissocier presque complètement
le travail de design de la page de résultat et le programme
Perl au coeur du script CGI.
Pour plus de commodité, nous allons tirer bénéfice,
dans cet article, de la bibliothèque de fonctions du module
CGI.pm. Commençons par réaliser une page web conforme
à la présentation globale de notre site. Nous pouvons
utiliser un éditeur wysiwyg, et se simplifier considérablement
la tâche si l'on considère que le même résultat
aurait nécessité la saisie manuelle de chaque ligne
de code en Perl, à l'aide de l'instruction print.
Cette page pourra figurer, sur le serveur qui héberge notre
site, dans n'importe quel répertoire (un sous-répertoire
du répertoire cgi-bin peut être imposé). Décidons
d'emblée où cette page devra être stockée
afin d'adapter les liens en conséquence. Insérons
alors dans notre réalisation, aux différents endroits
où seront inscrites les données en sortie du script
Perl, un texte explicite qui fera référence au type
de données reçu. Prenons un exemple très simple,
mais dont le principe pourra être repris pour l'insertion
"à la volée" de contenu bien plus complexe:
nous allons utiliser Perl pour insérer la date dans notre
page web (imaginons que cette page soit une confirmation de la commande
d'un article sur une boutique en ligne: nous voulons certainement
que figure la date sur cette page). Nous aurions pu utiliser Javascript
pour cela, convenons-en, mais nous pouvons imaginer que notre script
Perl définitif ne renverra pas que la date du jour, mais
beaucoup d'autres données pertinentes qui seront inscrites
de la même manière sur notre page ainsi formatée.
Comment ça marche?
Le principe de la manoeuvre est élémentaire. Nous
allons utiliser Perl pour lire le contenu de la page html qui sert
de modèle (un fichier texte), puis nous allons remplacer
tous les textes spécifiques que nous y avons insérés
(et qui servent de marqueurs) par la sortie correspondante (variable)
du programme Perl.
Si notre page s'appelle "template.html", et que notre
marqueur soit:
|
#INSERTION DE LA DATE#
(<P> Aujourd'hui nous sommes
le #INSERTION DE LA DATE#</P>)
alors notre script Perl ressemblera à ceci:
#!/usr/bin/perl
use CGI;
$objet=new CGI;
print $objet->header;
# lecture de la page modele
$modele="template.html";
open(FICHIER,"<$modele");
@modele = <FICHIER>;
close(FICHIER);
# regroupement des lignes HTML en une seule variable
$buffer=join("",@modele);
# determination de la date
($sec,$min,$hour,$mday, $mon,$year,$wday,$yday,$isdst)=localtime(time);
$jour=(Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)[$wday];
$mois=(Janvier, Fevrier, Mars, Avril, Mai, Juin, Juillet,
Aout, Septembre, Octobre, Novembre, Decembre)[$mon];
$datedujour="$jour $mday $mois ".($year+1900);
# remplacement du marqueur HTML par la date
$buffer=~s/#INSERTION DE LA DATE#/$date du jour/g;
# renvoi de la page au navigateur
print $resultPage;
|
Et voilà! Sans rentrer dans les détails du programme,
précisons toutefois certains points: la détermination
de la date utilise la fonction localtime() pour récupérer
diverses données, que l'on peut ensuite formater comme on
le désire (à noter que Perl renvoie, pour l'année,
un chiffre entre 0 et 100: il nous faut donc ajouter 1900 au résultat).
Le remplacement de la chaine "INSERTION DE LA DATE" par
le contenu de la variable $datedujour fait appel, quant à
lui, à une expression régulière
et une opération de substitution classique en Perl.
|