StartseiteWebPerl im Web

Modul HTML::Template

09. OKTOBER 2011
von Jörg
Web - Perl im Web

Das HTML::Template Modul erleichtert es sehr den Perl-Code und die Darstellungssprache HTML zu trennen. Nachträgliche Designänderungen sind leichter anzupassen, selbst auch für nicht Perl-Programmierer.

  • Modul einbinden
    use HTML::Template;
  • Template-Objet erzeugen mit dem Templatefile .html
    my $t = HTML::Template->new(filename => "template.html");
  • Hash-Variable als Paramter dem Template übergeben
    $t->param( home => 1 );
  • Template ausgeben
    print $t->output();

Hier gleich vorweg ein komplettes Beispiel, mit einer Perl Datei index.pl und einer Template Datei template.html:

index.pl
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/perl -w
                              
#Skriptname:  index.pl
#Funktion:    Indexseite von Webdeisgn Haefner
#Autor:       Jörg Häfner
#Datum:       07.10.2011

use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);  #Nur für Testumbegung
use HTML::Template;

my $cgi = new CGI;

#Templateobjekt erzeugen
my $t = HTML::Template->new(filename => "template.html");

# Header erzeugen
print $cgi->header( { -type=>"text/html" } );

# Parameter holen
my $page = $cgi->param("page");

# entsprechende Seite aufrufen
if($page eq "webdesign"){
  $t->param( webdesign => 1, 
             title => "Leistungen - " );
}
elsif($page eq "softwareentwicklung"){
  $t->param( softwareentwicklung => 1,
             title => "Softwareentwicklung - " );
}
elsif($page eq "referenzen"){
  $t->param( referenzen => 1,
             title => "Referenzen - " );
}
elsif($page eq "uebermich"){
  $t->param( uebermich => 1,
             title => "Über mich - " );
}
elsif($page eq "impressum"){
  $t->param( impressum => 1,
             title => "Impressum - " );
}
elsif($page eq "kontakt"){
  $t->param( kontakt => 1,
             title => "Kontakt/Anfrage - " );
}
# Startseite
else {
  $t->param( home => 1 );
}

# Template ausgeben                           
print $t->output();
template.html
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de-de" lang="de-de" dir="ltr" >
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="robots" content="index, follow" />
  <title><TMPL_VAR title>Webdesign H&auml;fner - Landkreis Forchheim</title>
  <link href="favicon_brush.ico" rel="shortcut icon" type="image/x-icon" />
  <link rel="stylesheet" href="css/style.css" type="text/css" /> 
</head>
<body>  
  <div id="wrapper">     
    <div id="menu">
        <ul>
          <li><a id="home" href="index.pl">
                <img src="images/home.png" alt="Startseite" height="20" width="21" />
              </a>
          </li>
          <li><a href="index.pl?page=webdesign">Webdesign</a></li>
          <li><a href="index.pl?page=softwareentwicklung">Softwareentwicklung</a></li>
          <li><a href="index.pl?page=referenzen">Referenzen</a></li>
          <li><a href="index.pl?page=uebermich">&Uuml;ber mich</a></li>
          <!--  <li><a href="">Kundenbereich</a></li> -->
        </ul>
    </div> 
    
    <div id="content">
    <TMPL_IF home>
      <h2>Startseite</h2>  
    </TMPL_IF>  
    
    <TMPL_IF webdesign>
      <h2>Startseite</h2> 
    </TMPL_IF>
    
    <TMPL_IF softwareentwicklung>
      <h2>Startseite</h2> 
    </TMPL_IF>
    
    <TMPL_IF referenzen>
      <h2>Startseite</h2> 
    </TMPL_IF>
    
    <TMPL_IF uebermich>
      <h2>Startseite</h2> 
    </TMPL_IF>
    
    <TMPL_IF kontakt>
      <h2>Startseite</h2> 
    </TMPL_IF>
    
    <TMPL_IF impressum>
      <h2>Startseite</h2> 
    </TMPL_IF>
    </div>
    
    <img src="images/frogtop.png" alt="frog" height="121" width="230" id="frogtop" />    
    <img src="images/frog1.png" alt="frog1" height="160" width="173" id="frog1" />    
    <img src="images/frog2.png" alt="frog2" height="288" width="284" id="frog2" />
  
    <div id="footer">
      <ul>
        <li><a href="http://blog.webdesign-haefner.de">Blog</a></li>
        <li><a href="index.pl?page=impressum">Impressum</a></li>
        <li><a href="index.pl?page=kontakt">Kontakt/Anfrage</a></li>
      </ul> 
    </div>     
  </div>
</body>
</html>

Die Übergabeparamter von index.pl zum Template template.html sind Hash-Variablen, die im Template dann abgefragt werden können, und eine dementsprechende Ausgabe der Webseite erfolgt.

TMPL_VAR - Variablen ins Template einfügen

in index.pl
$t->param( title => "Impressum - " );

in template.html
<title><TMPL_VAR title>Webdesign Häfner - Landkreis Forchheim</title>

Ergebnis:
<title>Impressum - Webdesign Häfner - Landkreis Forchheim</title>

TMPL_VAR ist quasi ein Platzhalter für der Hashvariable mit dem Schlüssel (key) title, der in diesem Fall den Wert "Impressum - " hat.

TMPL_IF - TMPL_ELSE - TMPL_UNLESS - Abfragen im Template

Das sind die zu verwendeten "Kontrollstrukturen" im Template, mit diesen wird die Ausgabe des Templates gesteuert, quasi welche Seiten, bzw. was ausgegeben werden soll.

in template.html
01
02
03
04
05
06
07
08
09
<TMPL_IF home>
  <h2>Startseite</h2> 
<TMPL_ELSE> 
  <h2>nicht Startseite</h2> 
</TMPL_IF>

<TMPL_UNLESS home>
  <h2>nicht Startseite</h2> 
</TMPL_UNLESS>

TMPL_LOOP - Schleifen im Template

Für Schleifen zum Füllen von zb. Tabellen steht TMPL_LOOP zur Verfügung, allerdings muss hier die Referenz von dem array mit den hash-Variablen übergeben werden:

in index.pl
$t->param( page_navi => \@page_navi ); 

in template.html
01
02
03
04
05
06
07
<TMPL_IF pages_navi>
  <div id="page_navi">          
   <TMPL_LOOP page_navi>
     <TMPL_VAR links>
   </TMPL_LOOP>
  </div>
</TMPL_IF>

TMPL_INCLUDE - weitere Templates im Templat einfügen

Mit TMPL_INCLUDE kann ein weiteres Template bzw. eine weiter Datei eingefügt werden.

Die Parameter des eingefügten Templates werden dann wie „ eigene“ Parameter behandelt. So muss man nicht zwei verschiedene Objekte erzeugen, um die Parameter zu ersetzen, sondern man ersetzt alles in einem Objekt.

in template.html
<TMPL_INCLUDE template2.html>

Hinterlasse einen Kommentar

Ein Frosch der sich an der Seite festhält