Git --projet-boite-à-outils

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

build_site.pl (téléchargement)
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.

makefile
default:
	test -d build || mkdir build
	perl build_site.pl base_template.html content
	cp -R content/copy/* build