Dynamik ist in vielen Kontexten (Volkswirtschaft, Beziehungen, Bewegungen) wünschenswert, aber in anderen Bereichen (Kirchenbau) genießt die Statik einen besseren Ruf. Auch für eine Website ist Statik nicht nur so last century: Gesetzt den Fall, ein Webhoster bietet keine MySQL-Datenbanken an. Oder es muss schnell eine Notversion der Site auf CD gebrannt werden. Dann ist Schluss mit Dynamik. Deshalb gibt es auch ein kleines Skript, das alle Seiten der Datenbank abruft und sie sauber verknüpft in einen Ordner html
innerhalb des lokalen Siteordners ablegt.
Das Skript ist sozusagen der gefräßige Zwilling des Anzeigeskripts show.pl
, da es nicht einen einzelnen Datensatz, sondern alle Datensätze aus der Datenbank holt und mehrere hundert HTML- und TeX-Dateien erzeugt:
#!/usr/bin/perl -wT use strict; use lib "."; use Sitemod; my $parameter = shift; unless ($parameter) { print "Usage: staticsite [html | pdf | tex | all]\n"; exit; } my $mode = sqlmode(); my $dbh = connector($mode); my $where = ($parameter eq 'tex') ? 'WHERE texcontent IS NOT NULL' : ($parameter eq 'pdf') ? 'WHERE pdfcontent IS NOT NULL' : ''; my $query = qq{SELECT page_id, page_type, title, content, pages.author_id, authors.first_name, authors.last_name, mother_id, user_id, texcontent, position, DATE_FORMAT(mod_date, '%d. %m. %Y, %T') AS datum, site_id FROM pages JOIN authors USING (author_id) $where}; my $sth = $dbh->prepare($query); $sth->execute; my $page_hash; while ($page_hash = $sth->fetchrow_hashref) { if ($parameter =~ /(all|html)/) { print "Generiere HTML-Datei für Seite $page_hash->{page_id}..."; open HTML, "> /Users/jan/Sites/janeden/htdocs/html/$page_hash->{page_id}.html" or die "Cannot open file for writing: $!"; print HTML display_page($page_hash, $mode, $dbh); close HTML; print "fertig.\n"; } if ($page_hash->{texcontent} && ($parameter =~ /(all|tex)/)) { print "Generiere TeX-Datei für Seite $page_hash->{page_id}..."; open TEX, "> /Users/jan/Sites/janeden/htdocs/tex/$page_hash->{page_id}.tex" or die "Cannot open file for writing: $!"; print TEX $page_hash->{texcontent}; close TEX; print "fertig.\n"; } if ($page_hash->{pdfcontent} && ($parameter =~ /pdf/)) { print "Generiere PDF-Datei für Seite $page_hash->{page_id}..."; open PDF, "> /Users/jan/Sites/janeden/htdocs/pdf/$page_hash->{page_id}.pdf" or die "Cannot open file for writing: $!"; print PDF $page_hash->{pdfcontent}; close PDF; print "fertig.\n"; } } $dbh->disconnect;
Nicht gerade effizient, aber sehr effektiv.