Hier ein komplettes Beispiel einer universell einsetzbaren Templateroutine. Diese kann mit Skalar, Array und Hashwerten arbeiten und ist
mit einer Zeile aufzurufen.
1. Das Beispielscript
#!/usr/bin/perl
#Fehlerausgabe an Browser
use CGI::Carp qw(fatalsToBrowser);
#############################################################
# Auszugebende Werte
$seitentitel = "Templateroutine in Action";
@colors = ('Rot','Weiss','Grün','Blau','Silber');
%produktinfo = (
'name' => 'Geschenkbox',
'bildurl' => 'http://www.inspire-world.de/perlcgi/pics/box.gif',
'hersteller' => 'Kiste & Co',
'beschreibung' => 'Universell verwendbare Geschenkbox',
'preis' => '12,59'
);
#############################################################
print "Content-type: text/html\n\n";
# Aufruf der Subroutine mit dem Template welches verwendet werden soll
print &tmplroutine("ausgabe.html");
# - - - - - - - - - - - - - - - - - - - - - -
# Subroutine Templateausgabe
# - - - - - - - - - - - - - - - - - - - - - -
sub tmplroutine {
my $templatedatei = shift;
my $OUTPUT;
local($/);
open (FILE, "<$templatedatei") || die "Kann Template nicht oeffnen: $!\n";
$OUTPUT = <FILE>;
close(FILE);
# Skalarwerte ersetzen
$OUTPUT =~ s/<__\$([\w\-]+)__>/${$1}/g;
# Hashwerte ersetzen
$OUTPUT =~ s/<__\%([\w\-]+)\{([\w\-]+)\}__>/${$1}{$2}/g;
# Arraywerte ersetzen
$OUTPUT =~ s/<__\@([\w\-]+)\[([\w\-]+)\]__>/${$1}[$2]/g;
return $OUTPUT;
}
2. Das Template dazu
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META http-equiv="Content-Type" content="text/html">
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title><__$seitentitel__></title>
<style type="text/css">
<!--
body {
font-family: Verdana, Arial;
background-color: #ffffff;
}
.tab {
background-color: #42719f;
}
.tabt {
background-color: #f4f4f4;
font-size: 11px;
padding: 3px;
}
.tc {
background-color: #ffffff;
font-size: 11px;
padding: 3px;
}
-->
</style>
</head>
<body>
<table cellspacing="1" cellpadding="0" border="0" width="500" class="tab">
<tr>
<td colspan="2" class="tabt"><b>Titel:</b> <__%produktinfo{name}__>
<b>Hersteller:</b> <__%produktinfo{hersteller}__></td>
</tr>
<tr>
<td valign="top" class="tc" width="50%">
<img src="<__%produktinfo{bildurl}__>" width=100 height=109 border=0 alt="">
<br><br>
<__%produktinfo{beschreibung}__></td>
<td valign="top" class="tc">
Preis: <__%produktinfo{preis}__><br><br>
Farben:<br>
<__@colors[0]__><br>
<__@colors[1]__><br>
<__@colors[2]__><br>
<__@colors[3]__><br>
<__@colors[4]__><br>
</td>
</tr>
</table>
</body>
</html>
3. So sieht es dann aus:
Demo ansehen
|