Script de création du site
Master Page
L'idée est classique : on dispose d'un contenu identique pour toutes les pages, au sein duquel on place un contenu qui varie en fonction de la page demandée. C'est le concept de page maîtres que l'on retrouve en asp.net et qui est aussi utilisé dans d'autres frameworks web.
Le contenu de base, qui structure chaque page, est présent dans un fichier nommé base_template.html. Dans celui-ci se trouve la chaîne de texte CONTENT_PLACEHOLDER qui est destinée à être remplacée par du contenu html. C'est le rôle du script Perl présenté ci-dessous. Pour chaque fichier html présent dans un dossier passé en paramètre, il génère un fichier de même nom dans le dossier de sortie (hardcodé au nom de build) qui contient le code de la template de base + le contenu du fichier traité.
Script de construction du site
use strict; use warnings; use File::Slurp; my $usage = 'Usage : build_site <template_file> <content_dir>'; my $template = $ARGV[0]; $template = read_file($template); # on lit le contenu du template my $dir = $ARGV[1]; opendir(DIR, $dir) || die "Can't open directory $dir\n"; while(my $file = readdir(DIR)) { next if $file =~ /^\..*$/; $file = "$dir/$file"; if(-f $file) { my $file_content = read_file($file); my $result = $template; $result =~ s/CONTENT_PLACEHOLDER/$file_content/; write_result($result, "$dir/build/", $file); } } closedir(DIR); # param $content : contenu à écrire dans la sortie # param $dir : répertoire de base dans lequel écrire le fichier # param $name : nom du fichier d'où est originaire le contenu sub write_result { my ($content, $dir, $name) = @_; $name =~ /\/(.+?).html/; my $temp = "build/$1.html"; open(FILE_OUT, ">$temp") or die "Shit happened!"; print FILE_OUT $content; close(FILE_OUT); }
Autres ressources du site
Lors de la création du site, le contenu complet d'un dossier nommé copy est copié dans le répertoire build. Il contient un sous-répertoire img qui contient les images utilisées sur le site.
Les pages HTML font références à des fichiers de code via le répertoire code. Ce répertoire n'est pas un sous-répertoire du dossier build. Il est exposé au site via un dossier virtuel ajouté à la configuration du serveur et qui pointe vers ../../. Plus d'explications sont fournies dans la page suivante.
Makefile
Comme le script Perl nécessite plusieurs arguments et que la copie de fichiers est plus facilement réalisée en shell qu'en Perl, j'ai écrit un petit fichier Makefile, qui permet de générer le site en se rendant dans le répertoire éponyme et en tapant la commande make.
default: test -d build || mkdir build perl build_site.pl base_template.html content cp -R content/copy/* build