Die Kopfdaten eines Webauftritts sind üblicherweise bei den meisten Dokumentdateien weitgehend gleich.
Es ist sinnvoll, die gleichbleibenden Abschnitte in eine separate Datei auszulagern und zentral
zu verwalten.
Leider bietet HTML keinen Mechanismus an, der Dateien automatisch in die Dokumente
einfügt. Mit UHTML kann man ein <include>
-Element definieren, das
genau dies tut, sprich, die in der Datei head-data
ausgelagerten Daten automatisch einfügt.
Angenommen die Datei head-data
wird im Unterverzeichnis include
des Dokumentverzeichnisses abgelegt. In diesem Fall könnte die Benutzung von <include>
so aussehen:
index.uhtml <html> <head> <include file="/include/head-data"> ... </head> ... </html>
Ein solches <include>
-Element kann in vielen Projekten Verwendung finden.
Ensprechend der oben beschriebenen Konvention wird der Programmcode in der Datei
uHTML/include.pm
im Skriptverzeichnis abgelegt. Der Inhalt von
include.pm
könnte dann so aussehen:
include.pm use uHTML ; sub Include($) { my $Node = shift; $Node->map(join('',<FH>),'') if $Node->Attr('file') and open FH,$ENV{'DOCUMENT_ROOT'}.$Node->Attr('file'); } uHTML->registerTag('include',\&Include);
Um diese kleine Bibliotheksfunktion mit einem Webauftritt zu verbinden, braucht man ein kurzes
cgi-Programm, das in der Datei uhtml.pl
im Skriptverzeichnis abgelegt wird:
uhtml.pl #!/usr/bin/perl use uHTML; open $FILE,"$ENV{'DOCUMENT_ROOT'}$ENV{'PATH_INFO'}" or die "File: $ENV{'PATH_INFO'} not found"; print "Content-type: text/html\n\n"; print uHTML::recode(join('',<$FILE>));
Durch ein paar Zeilen, die man der Datei .htaccess
im Dokumentverzeichnis
hinzufügt, wird UHTML quasi “magisch” in einen Webauftritt integriert und
in allen *.uhtml
Dateien lauffähig gemacht.
.htaccess DirectoryIndex index.uhtml RewriteEngine on RewriteRule ^(/?)(.*\.uhtml) $1cgi-bin/uhtml.pl/$2 [L,QSA]
Dieses voll funktionsfähige Beispiel zeigt das Prinzip der Integration von einem benutzedefiniertem UHTML–Element in einen Webauftritt. Zwar kommen darin weder variable Parameter vor noch erfordert die Serveranfrage eine Initialisierung oder Datenübernahme, die Erweiterung um diese Elemente ist jedoch trivial.
Dieses Beispiel mit allen Dateien und Verzeichnissen so wie vom apache benötigt:
uHTML Beispiel
(7.84kB, from 18.11.2016, 18:13:48)