1 <?xml version=
"1.0" encoding=
"iso-8859-1" ?>
2 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <html xmlns=
"http://www.w3.org/1999/xhtml">
7 <title>Templates parsen
</title>
8 <meta name=
"author" content=
"Patrick Canterino" />
9 <link rel=
"stylesheet" href=
"style.css" type=
"text/css" />
10 <base target=
"_self" />
12 <body bgcolor=
"#FFFFFF" text=
"#000000" link=
"#0000FF" vlink=
"#0000FF" alink=
"#0000FF">
14 <h1><a name=
"top" id=
"top">Templates parsen
</a></h1>
17 <li><a href=
"#laden-einlesen">Klasse laden und Template einlesen
</a></li>
18 <li><a href=
"#variablen-setzen">Variablen setzen
</a></li>
19 <li><a href=
"#schleifen-setzen">Daten f
ür Schleifen setzen
</a></li>
20 <li><a href=
"#parsen">Templates parsen
</a></li>
23 <h2><a name=
"laden-einlesen" id=
"laden-einlesen">Klasse laden und Template einlesen
</a></h2>
25 <p>Erstmal ist es wichtig, die Klasse in Ihre Scripts einzubinden:
</p>
30 include(
"class.Template.php
");
41 <p>Ggf. m
üssen Sie andere Pfade angeben, oder in Perl zun
ächst mit
<code>use lib
</code> einen weiteren Pfad f
ür Perl-Module hinzuf
ügen. Andererseits k
önnen Sie die Klassen auch direkt in Ihre Scripts einbetten.
</p>
43 <p>Nun m
üssen Sie ein neues Objekt der Klasse anlegen:
</p>
52 tpl = template.Template()
55 <p>Dadurch stellt die Variable
<code>$tpl
</code> bzw.
<code>tpl
</code> ein neues Objekt der Template-Klasse dar (wird in den nachfolgenden Beispielen auch verwendet).
Über das Objekt k
önnen Sie auf die verschiedenen Methoden der Klasse zugreifen.
</p>
57 <p>Das Wichtigste ist, erstmal eine Datei einzulesen. Das geschieht
über die Methode
<code>read_file()
</code>:
</p>
62 $tpl-
>read_file(Datei);
69 <p>Dadurch wird die angegebene Datei eingelesen und die
<a href=
"aufbau.htm#includes"><code>{INCLUDE}
</code>-Anweisungen
</a> verarbeitet. Der Inhalt der Datei wird anschlie
ßend in den Objekteigenschaften gespeichert.
<br />
70 Es ist auch m
öglich, den Vorlagentext direkt einzugeben. Das k
önnen Sie mit Hilfe der Methoden
<code>set_template()
</code> und
<code>add_text()
</code> erreichen. Das einzige Argument dieser Funktionen, ist der Text, der in den Objeteigenschaften gespeichert werden soll.
<code>set_template()
</code> legt den kompletten Vorlagentext fest,
<code>add_text()
</code> h
ängt den Text nur an (
<code>read_file()
</code> verwendet diese Methode intern auch).
<code>{INCLUDE}
</code>-Anweisungen werden hierbei allerdings nicht verarbeitet, Sie k
önnen dies jedoch manuell durch Aufruf der Methode
<code>parse_includes()
</code> durchf
ühren.
</p>
72 <p class=
"upanddown"><a href=
"#top">Nach oben
</a></p>
74 <h2><a name=
"variablen-setzen" id=
"variablen-setzen">Variablen setzen
</a></h2>
76 <p>Eines der wichtigsten Merkmale von Templates ist die Tatsache, dass bestimmte Abschnitte variabel sind, d.h. hier werden Daten vom Script eingef
üllt. F
ür diese Klasse werden die variablen Abschnitte von geschweiften Klammern umschlossen. Eine Variable kann zum Beispiel so aussehen:
<br />
77 <code>{VARIABLE}
</code><br />
78 Um f
ür eine Variable einen Wert festzulegen, k
önnen Sie ganz einfach die Methode
<code>set_var()
</code> verwenden:
</p>
83 $tpl-
>set_var(Variablenname,Wert);
87 tpl.set_var(Variablenname,Wert)
90 <p>Bei den Variablen wird zwischen Gro
ß- und Kleinschreibung unterschieden. Die Variable
<code>variable
</code> ist also eine andere als
<code>VARIABLE
</code>.
</p>
92 <p>Sie k
önnen als Variable auch ein Array angeben, dieses wird dann ganz einfach zusammengef
ügt.
</p>
94 <p>Auf den Inhalt einer Variable k
önnen Sie jederzeit mit der Methode
<code>get_var()
</code> zugreifen. Wenn die Variable nicht existiert, wird
<code>false
</code> zur
ückgegeben. Wenn Sie beim Aufruf von
<code>get_var()
</code> überhaupt keinen Variablennamen angeben, wird ein Array mit den Namen s
ämtlicher definierten Variablen zur
ückgegeben.
</p>
96 <p class=
"upanddown"><a href=
"#top">Nach oben
</a></p>
98 <h2><a name=
"schleifen-setzen" id=
"schleifen-setzen">Daten f
ür Schleifen setzen
</a></h2>
100 <p>Bei Schleifen haben Sie die M
öglichkeit, entweder f
ür jeden Abschnitt die Daten einzeln oder alle Daten auf einmal hinzuzuf
ügen.
<br />
101 Dazu stehen Ihnen die Methoden
<code>add_loop_data()
</code> und
<code>set_loop_data()
</code> zur Verf
ügung (erstere f
ügt neue Daten hinzu, letztere setzt die Daten komplett). Beide Methoden verwenden dasselbe Schema. Als erster Parameter kommt der Name der Schleife, dann der Datensatz bzw. alle Daten. Der Datensatz besteht aus einem assoziativen Array bzw. Hash-Referenz bzw. Dictionary, bei dem die Schl
üssel den Namen der Variablen und der Wert eben den Wert der Variablen darstellen. Bei
<code>set_loop_data()
</code> m
üssen Sie die Datens
ätze als ein Array bzw. Array-Referenz bzw. Liste von Datens
ätzen
übergeben.
</p>
103 <p>Beispiel f
ür
<code>add_loop_data()
</code>:
</p>
108 $tpl-
>add_loop_data('Test-Schleife',array('name' =
> 'Bart Simpson', 'email' =
> 'el-barto@example.org'));
109 $tpl-
>add_loop_data('Test-Schleife',array('name' =
> 'Homer Simpson', 'email' =
> 'homer.simpson@example.org'));
113 $tpl-
>add_loop_data('Test-Schleife',{'name' =
> 'Bart Simpson', 'email' =
> 'el-barto@example.org'});
114 $tpl-
>add_loop_data('Test-Schleife',{'name' =
> 'Homer Simpson', 'email' =
> 'homer.simpson@example.org'});
118 tpl.add_loop_data('Test-Schleife',{'name': 'Bart Simpson', 'email': 'el-barto@example.org'})
119 tpl.add_loop_data('Test-Schleife',{'name': 'Homer Simpson', 'email': 'homer.simpson@example.org'})
122 <p>Beispiel f
ür
<code>set_loop_data()
</code>:
</p>
127 $tpl-
>set_loop_data('Test-Schleife',array(array('name' =
> 'Bart Simpson', 'email' =
> 'el-barto@example.org'),
128 array('name' =
> 'Homer Simpson', 'email' =
> 'homer.simpson@example.org')));
132 $tpl-
>set_loop_data('Test-Schleife',[{'name' =
> 'Bart Simpson', 'email' =
> 'el-barto@example.org'},
133 {'name' =
> 'Homer Simpson', 'email' =
> 'homer.simpson@example.org'}]);
137 tpl.set_loop_data('Test-Schleife',[{'name': 'Bart Simpson', 'email': 'el-barto@example.org'},
138 {'name': 'Homer Simpson', 'email': 'homer.simpson@example.org'}])
141 <p class=
"upanddown"><a href=
"#top">Nach oben
</a></p>
143 <h2><a name=
"parsen" id=
"parsen">Templates parsen
</a></h2>
145 <p>Wenn Sie alle Variablen und Schleifen-Daten gesetzt haben, ist es an der Zeit, diese Daten auch auf die Template-Datei anzuwenden. Dies geschieht mit Hilfe der Methode
<code>parse()
</code>:
</p>
157 <p>Dadurch werden alle
<a href=
"aufbau.htm#variablen">Variablen
</a> durch Text ersetzt,
<a href=
"aufbau.htm#bedingt">bedingte Bl
öcke
</a> und
<a href=
"aufbau.htm#schleifen">Schleifen
</a> verarbeitet und in der Template-Datei
<a href=
"aufbau.htm#definitionen">definierte Variablen
</a> ausgelesen und auf die Template-Datei angewendet.
</p>
159 <p>Zu guter letzt k
önnen Sie noch die verarbeiteten Daten zur
ückgeben lassen:
</p>
164 $template = $tpl-
>get_template();
168 template = tpl.get_template()
171 <p>Dadurch enth
ält die Variable
<code>$template
</code> bzw.
<code>template
</code> die nun verarbeitete Template-Datei (sie k
önnen
<code>get_template()
</code> übrigens jederzeit verwenden, um an den Vorlagentext heranzukommen).
</p>
173 <p>Weiterhin k
önnen Sie den kompletten Vorlagentext auch in eine Datei schreiben. Diese muss allerdings bereits ge
öffnet sein. Verwenden Sie dazu die Methode
<code>to_file()
</code> und geben Sie als Parameter das Handle der ge
öffneten Datei an.
</p>
178 $handle = fopen(
"datei.htm
",
"w
");
179 $tpl-
>to_file($handle);
184 open(HANDLE,
">datei.htm
");
185 $tpl-
>to_file(\*HANDLE);
190 handle = open(
"datei.htm
",
"w
")
195 <p><b>Achtung:
</b><br />
196 Mit Version
2.5 der Template-Klasse hat sich der komplette Vorgang des Parsens ver
ändert. Falls Sie merken, dass sich dadurch das Ergebnis des endg
ütigen Textes von dem, was Sie gewohnt sind, unterscheidet, k
önnen Sie wieder auf den alten Parsing-Vorgang umschalten. F
ügen Sie dazu irgendwo
<b>vor
</b> dem Aufruf von
<code>parse()
</code> folgende Zeile ein:
</p>
201 $tpl-
>old_parsing =
1;
205 $tpl-
>{'old_parsing'} =
1;
212 <p>Durch diese Anweisung aktivieren Sie den alten Parsing-Mechanismus. Wenn Sie zu dieser Ma
ßnahme greifen m
üssen (was ich nat
ürlich nicht hoffe), w
ürde ich mich freuen, wenn Sie mir eine kurze Mail schicken, damit wir uns dieses Problem evtl. gemeinsam mal ansehen k
önnen.
</p>
214 <p class=
"upanddown"><a href=
"#top">Nach oben
</a></p>
216 <h2><a name=
"parsen" id=
"parsen">Zustand sichern und wiederherstellen
</a></h2>
218 <p>Falls Sie den Template-Text wieder in den Zustand zur
ückversetzen m
öchten, den er direkt nach dem Einlesen der Template-Datei hatte, m
üssen Sie diese nicht wieder neu einlesen. Sie k
önnen ganz einfach die Methode
<code>reset()
</code> verwenden:
</p>
230 <p>Umgekehrt k
önnen Sie den aktuellen Status des Template-Textes auch sichern, um sp
äter diesen Status wiederherstellen zu k
önnen. Dies geschieht mit der Methode
<code>save_state()
</code>:
</p>
235 $tpl-
>save_state()
242 <p>Dadurch k
önnen Sie diesen Status mit
<code>reset()
</code> wiederherstellen. Es ist dadurch allerdings nicht mehr m
öglich den Zustand, den der Template-Text direkt nach dem Einlesen hatte, wiederherzustellen.
</p>
244 <hr width=
"80%" noshade=
"noshade" />
246 <p><a href=
"index.htm">Zur
Übersicht
</a></p>
248 <hr width=
"80%" noshade=
"noshade" />
250 <p style=
"font-size:8pt">© 2002-
2011 Patrick Canterino
</p>
252 <table border=
"0" cellspacing=
"0" style=
"font-size:8pt">
255 <td><a href=
"http://www.patshaping.de/">http://www.patshaping.de/
</a></td>
258 <td><a name=
"bottom" id=
"bottom">E-Mail:
</a></td>
259 <td><a href=
"mailto:patrick@patshaping.de">patrick@patshaping.de
</a></td>