]> git.p6c8.net - template-class.git/blob - doc/vonhand.htm
template.py funktioniert auch unter Python 2.7.
[template-class.git] / doc / vonhand.htm
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">
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6 <head>
7 <title>Templatates &quot;von Hand&quot; parsen</title>
8 <meta name="author" content="Patrick Canterino" />
9 <link rel="stylesheet" href="style.css" type="text/css" />
10 <base target="_self" />
11 </head>
12 <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#0000FF" alink="#0000FF">
13
14 <h1><a name="top" id="top">Templatates &quot;von Hand&quot; parsen</a></h1>
15
16 <p>Neben den herk&ouml;mmlichen Methoden, die die Template-Dateien weitgehend automatisch verarbeiten, haben Sie auch die M&ouml;glichkeit, die Template-Dateien sozusagen &quot;von Hand&quot; zu verarbeiten. Sie haben hierbei genaue Kontrolle &uuml;ber die zu ersetzenden Variablen, die zu verarbeitenden <code>{IF}</code>-Bl&ouml;cke usw.</p>
17
18 <p>Um eine <a href="aufbau.htm#variablen">Variable</a> sofort durch Text zu ersetzen, k&ouml;nnen Sie die Methode <code>fillin()</code> verwenden:</p>
19
20 <pre class="code">
21 # PHP / Perl:
22
23 $tpl-&gt;fillin(Variablenname,Wert);
24
25 # Python:
26
27 tpl.fillin(Variablenname,Wert)
28 </pre>
29
30 <p>Sie haben weiterhin die M&ouml;glichkeit, mit Hilfe der Methode <code>fillin_array()</code> eine Variable durch ein Array zu ersetzen (unter Perl k&ouml;nnen Sie eine Array-Referenz verwenden). Dabei werden die einzelnen Array-Elemente zusammengef&uuml;gt. Die Syntax dieser Methode entspricht der von <code>fillin()</code>, Sie k&ouml;nnen als optionalen dritten Parameter die Zeichenkette angeben, mit der die Array-Elemente verbunden werden sollen (die Vorgabe ist eine leere Zeichenkette, also <code>''</code>).</p>
31
32 <p>Wenn Sie die Variablen mit <code>set_var()</code> definiert haben und diese im Template-Text nun nacheinander durch die definierten Werte ersetzen m&ouml;chten, so wie es ein Aufruf von <code>parse()</code> tut, k&ouml;nnen Sie die Methode <code>replace_vars()</code> verwenden:</p>
33
34 <pre class="code">
35 # PHP / Perl:
36
37 $tpl-&gt;replace_vars();
38
39 # Python:
40
41 tpl.replace_vars()
42 </pre>
43
44 <p>Optional k&ouml;nnen Sie hier noch ein Array als Parameter mitgeben, das die Variablen, die ersetzt werden sollen, einschr&auml;nkt. Wird ein Array mitgegeben, werden nur die Variablen ersetzt, deren Namen sich in diesem Array befinden.</p>
45
46 <p>Genauso k&ouml;nnen Sie auch mit den <a href="aufbau.htm#bedingt"><code>{IF}</code>-Bl&ouml;cken</a> verfahren:</p>
47
48 <pre class="code">
49 # PHP / Perl:
50
51 $tpl-&gt;parse_if_block(Name,Bedingung);
52
53 # Python:
54
55 tpl.parse_if_block(Name,Bedingung)
56 </pre>
57
58 <p>Verneinte Bl&ouml;cke werden automatisch verarbeitet. Wenn Sie den optionalen dritten Parameter von <code>parse_if_block()</code> auf <i>true</i> setzen, werden diese Bl&ouml;cke nicht verarbeitet.</p>
59
60 <p>Falls Sie die Verarbeitung einer <a href="aufbau.htm#schleifen">Schleife</a> von Hand ansto&szlig;en m&ouml;chten, k&ouml;nnen Sie die Methode <code>parse_loop()</code> verwenden:</p>
61
62 <pre class="code">
63 # PHP / Perl:
64
65 $tpl-&gt;parse_loop(Name der Schleife);
66
67 # Python:
68
69 tpl.parse_loop(Name der Schleife)
70 </pre>
71
72 <p>Die Daten f&uuml;r die Schleifen werden allerdings weiterhin durch <a href="parsen.htm#schleifen-setzen"><code>add_loop_data()</code> und <code>set_loop_data()</code></a> eingef&uuml;gt.</p>
73
74 <p>Um die mit Hilfe von <a href="aufbau.htm#definitionen"><code>{DEFINE}</code>-Anweisungen</a> definierten Variablen auszulesen, k&ouml;nnen Sie die Methode <code>get_defined_vars()</code> verwenden:</p>
75
76 <pre class="code">
77 # PHP / Perl:
78
79 $tpl-&gt;get_defined_vars();
80
81 # Python:
82
83 tpl.get_defined_vars()
84 </pre>
85
86 <p>Dadurch werden die Variablen ausgelesen und in den Objekt-Eigenschaften abgespeichert, so als w&auml;ren sie mit <a href="parsen.htm#variablen-setzen"><code>set_var()</code></a> gesetzt worden. Sie K&ouml;nnen Sie dann mit <code>get_var()</code> wieder auslesen. Die Namen aller Variablen, die in der Template-Datei definiert wurden, befinden sich in den Objekt-Eigenscaften im Array mit dem Namen <code>defined_vars</code> (unter Perl handelt es sich um eine Array-Referenz).</p>
87
88 <p><a href="aufbau.htm#includes"><code>{INCLUDE}</code>-Anweisungen</a> k&ouml;nnen, wie bereits erw&auml;hnt, von <code>parse_includes()</code> verarbeitet werden:</p>
89
90 <pre class="code">
91 # PHP / Perl:
92
93 $tpl-&gt;parse_includes();
94
95 # Python:
96
97 tpl.parse_includes()
98 </pre>
99
100 <p>Falls Sie die <a href="aufbau.htm#trim"><code>{TRIM}</code>-Anweisungen</a> manuell verarbeiten lassen m&ouml;chten, steht die Methode <code>parse_trim_blocks</code> zur Verf&uuml;gung:</p>
101
102 <pre class="code">
103 # PHP / Perl:
104
105 $tpl-&gt;parse_trim_blocks();
106
107 # Python:
108
109 tpl.parse_trim_blocks()
110 </pre>
111
112 <p>Zus&auml;tzlich zu den normalen <code>{IF}</code>-Bl&ouml;cken steht noch eine &auml;ltere Variante zur Verf&uuml;gung. Diese soll eigentlich nicht mehr verwendet werden, da sie nicht soviele M&ouml;glichkeiten bietet und gerade bei HTML-Dokumenten f&uuml;r Un&uuml;bersicht sorgen kann. Der Vollst&auml;ndigkeit halber f&uuml;hre ich sie aber trotzdem hier auf, zumal sie vielleicht n&uuml;tzlich sein kann, sollte der Parser für die normalen <code>{IF}</code>-Bl&ouml;cke einen Bug aufweisen, die bei dieser alten Methode nicht auftritt.</p>
113
114 <p>Konkret werden bei dieser Variante bedingte Bl&ouml;cke von HTML-Tags mit frei w&auml;hlbaren Namen (eigentlich wohl eher XML, die ganzen Freaks werden mich jetzt ganz sicher verpr&uuml;geln...) umschlossen -&nbsp;die Variante tr&auml;gt deswegen auch den Namen &quot;CondTag&quot;.<br />
115 Das kann zum Beispiel so aussehen:</p>
116
117 <pre class="code">
118 &lt;Name&gt;Das ist ein bedingter Abschnitt!&lt;/Name&gt;
119 </pre>
120
121 <p>Auch hier ist es m&ouml;glich, mehrere Bl&ouml;cke ineinander zu verschachteln. Allerdings darf ein CondTag-Block nicht einen weiteren CondTag-Block mit dem selben Namen enthalten, weil die Funktion ansonsten ins Schleudern ger&auml;t.</p>
122
123 <p>Verarbeitet werden die Bl&ouml;cke von der Funktion <code>parse_condtag()</code>:</p>
124
125 <pre class="code">
126 # PHP / Perl:
127
128 $tpl-&gt;parse_condtag(Name,Bedingung);
129
130 # Python:
131
132 tpl.parse_condtag(Name,Bedingung)
133 </pre>
134
135 <hr width="80%" noshade="noshade" />
136
137 <p><a href="index.htm">Zur &Uuml;bersicht</a></p>
138
139 <hr width="80%" noshade="noshade" />
140
141 <p style="font-size:8pt">&copy;&nbsp;2002-2011 Patrick Canterino</p>
142
143 <table border="0" cellspacing="0" style="font-size:8pt">
144 <tr>
145 <td>Homepage:</td>
146 <td><a href="http://www.patshaping.de/">http://www.patshaping.de/</a></td>
147 </tr>
148 <tr>
149 <td><a name="bottom" id="bottom">E-Mail:</a></td>
150 <td><a href="mailto:patrick@patshaping.de">patrick@patshaping.de</a></td>
151 </tr>
152 </table>
153 </body>
154 </html>

patrick-canterino.de