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>Versionshistorie
</title>
8 <meta name=
"author" content=
"Patrick Canterino" />
9 <link rel=
"stylesheet" href=
"style.css" type=
"text/css" />
11 <body bgcolor=
"#FFFFFF" text=
"#000000" link=
"#0000FF" vlink=
"#0000FF" alink=
"#0000FF">
13 <h1>Versionshistorie
</h1>
15 <p><b>Neu in Version
2.5</b> (vom
27.11.2011)
</p>
18 <li><b>Variablen werden komplett anders ersetzt:
</b><br />
19 Der Vorgang des Ersetzens der Variablen wurde komplett ge
ändert. Die Template-Klasse durchsucht den Template-Text nun Zeichen f
ür Zeichen und ersetzt Variablen durch Text. Der Sinn hinter ist, dass auf diese Weise keine Variablen in Variablen mehr ersetzt werden k
önnen.
<br />
20 Dieses neue Verfahren ist deaktivierbar, d.h. man kann bei Problemen auf das alte Verfahren, das einfach nur Zeichenketten ersetzt, zur
ückgreifen.
</li>
21 <li><b><code>set_vars()
</code> und
<code>add_vars()
</code>:
</b><br />
22 Mit den neuen Methoden
<code>set_vars()
</code> und
<code>add_vars()
</code> ist es nun m
öglich, die interne Variablenliste komplett zu
überschreiben oder mit mehreren Variablen und Werten auf einmal zu erg
änzen.
</li>
23 <li><b><code>{TRIM}
</code>-Bl
öcke in der Perl-Version funktionieren jetzt:
</b><br />
24 Das Verarbeiten der
<code>{TRIM}
</code>-Bl
öcke hat in der Perl-Version nicht funktioniert, da eine falsche Variable verwendet wurde. Dieser Fehler wurde behoben.
</li>
25 <li><b>Anderer Programmierstil:
</b><br />
26 Der Programmierstil wurde ge
ändert. Dies betrifft vor allem die Einr
ückungen.
</li>
27 <li><b>Dokumentation korrigiert:
</b><br />
28 In der Dokumentation war die Beschreibung f
ür die
<code>reset()
</code>- und die
<code>save_state()
</code>-Methode unvollst
ändig.
</li>
29 <li><b>Neue Lizenz:
</b><br />
30 Die Template-Klasse ist nun unter den Bedingungen der
<a href=
"http://www.opensource.org/licenses/artistic-license-2.0.php">Artistic License
2.0</a> lizenziert.
</li>
33 <p><b>Neu in Version
2.0</b> (vom
9.8.2006)
</p>
36 <li><b><code>get_var()
</code>,
<code>set_var()
</code> und
<code>parse()
</code>:
</b><br />
37 Um die Arbeit mit der Template-Klasse etwas zu vereinfachen, wurde ein neues Interface f
ür die Haupt-Arbeit eingef
ührt. Es besteht im Wesentlichen aus den drei neuen Methoden
<code>get_var()
</code>,
<code>set_var()
</code> und
<code>parse()
</code>.
39 <li><code>get_var()
</code> gibt den Wert einer Variablen zur
ück. Wenn kein Name angegeben wurde, gibt
<code>get_var()
</code> die Namen aller definierten Variablen zur
ück.
</li>
40 <li><code>set_var()
</code> weist einer Variablen einen Wert zu.
</li>
41 <li><code>parse()
</code> setzt die Variablen ein, verarbeitet die
<code>{IF}
</code>-Bl
öcke, verarbeitet die Schleifen und liest die in der Template definierten Variablen aus.
</li>
44 <li><b>Variablen direkt in der Template-Datei definieren:
</b><br />
45 Man kann nun mit Hilfe der neuen
<code>{DEFINE}
</code>-Bl
öcke Variablen direkt in der Template-Datei definieren, so als h
ätte man sie mit
<code>set_var()
</code> definiert.
<br />
46 Es gibt hierbei zwei M
öglichkeiten:
48 <li><code>{DEFINE Name
"Wert
"}
</code>:
<br />
49 Hierbei erh
ält die Variable
"Name
" den Wert
"Wert
". Innerhalb des Blockes d
ürfen keine Zeilenumbr
üche vorkommen, ansonsten wird er ignoriert. Der Name der Variable darf keine Zeilenumbr
üche oder Leerzeichen enthalten. Wenn der Wert ausgelesen wird, so wird
<code>\n
</code> durch einen Zeilenumbruch ersetzt.
</li>
50 <li><code>{DEFINE Name}Wert{ENDDEFINE}
</code>:
<br />
51 Auch hier erh
ält die Variable
"Name
" den Wert
"Wert
". Der Name darf ebenfalls keine Zeilenumbr
üche oder Leerzeichen enthalten, der Wert allerdings schon.
</li>
53 Die direkt mit
<code>set_var()
</code> haben allerdings Vorrang gegen
über den erst
über
<code>{DEFINE}
</code> definierten. Zus
ätzlich werden zweitere erst von
<code>parse()
</code> abgearbeitet, wenn erstere abgearbeitet wurden.
</li>
54 <li><b>Schleifen:
</b><br />
55 Es wurde eine einfache M
öglichkeit zur Realisierung von Schleifen in einer Template-Datei hinzugef
ügt.
<br />
56 Man kann einen Block jetzt in
<code>{LOOP}
</code>...
<code>{ENDLOOP}
</code>-Bl
öcke einschlie
ßen. Dieser Block bekommt einen Namen, diesem Namen werden dann
über die Methoden
<code>add_loop_data()
</code> und/oder
<code>set_loop_data()
</code> Variablen zugewiesen. Der Block wird dann f
ür jeden Durchgang mit neuen Werten ausgegeben.
<br />
57 Der Vorteil hiervon ist, dass man so f
ür sich wiederholende Bl
öcke keine separate Template-Dateien erstellen muss.
<br />
58 Es ist zur Zeit leider noch nicht m
öglich, Schleifen zu verschachteln!
</li>
59 <li><b><code>{TRIM}
</code>-Bl
öcke:
</b><br />
60 Man kann jetzt Textstellen in
<code>{TRIM}
</code>-Bl
öcke einschlie
ßen. Beim Inhalt werden vorangestellte und abschlie
ßendende Leerzeichen und Zeilenumbr
üche entfernt.
</li>
61 <li><b>Verhalten der
<code>{INCLUDE}
</code>-Anweisungen ver
ändert:
</b><br />
62 Das Verhalten der
<code>{INCLUDE}
</code>-Anweisungen wurde in einigen F
ällen ge
ändert:
64 <li>Wenn man bei einer
<code>{INCLUDE}
</code>-Anweisung einen relativen Pfad angibt, so gilt dieser Pfad nun relativ zur
<b>Template-Datei
</b> und nicht mehr zum Script.
<br />
65 So wollte ich das eigentlich immer haben. Das alte Verhalten war eine Notl
ösung, weil ich mir nicht anders zu helfen wusste...
</li>
66 <li>Die Dateinamen, die bei einer
<code>{INCLUDE}
</code>-Anweisung angegeben werden, k
önnen nun auch Leerzeichen oder das }-Zeichen enthalten. In diesem Fall muss man den Dateinamen aber in doppelte Anf
ührungszeichen setzen.
</li>
69 <li><b>Template zur
ücksetzen:
</b><br />
70 Mit Hilfe der neuen
<code>reset()
</code>-Methode k
önnen Sie den Template-Text in den Zustand zur
ückversetzen, den er nach dem Auslesen der Template-Datei hatte. Zus
ätzlich k
önnen Sie mit
<code>save_state()
</code> den aktuellen Zustand des Template-Textes sichern und diesen dann bei Bedarf eben mit
<code>reset()
</code> wiederherstellen.
</li>
71 <li><b>Alias-Funktionen entfernt:
</b><br />
72 In der Perl- und in der PHP-Version wurden die alten Alias-Funktionen
<code>addtext()
</code>,
<code>as_string()
</code>,
<code>condtag()
</code> und
<code>readin()
</code> entfernt.
</li>
73 <li><b>Kleine Korrekturen:
</b><br />
74 Es wurden verschiedene, unterschiedliche kleine Korrekturen durchgef
ührt:
76 <li>Die Perl-Version verwendet jetzt nicht mehr
<code>split()
</code>, um eine Zeichenkette aufzuteilen. Stattdessen verwendet sie nun meine
<a href=
"http://www.patshaping.de/hilfen_ta/codeschnipsel/perl-explode.htm" target=
"_blank">Portierung der
<code>explode()
</code>-Funktion von PHP
</a>. Die Grund hierf
ür ist ein Problem von
<code>split()
</code>, welches auch auf der verlinkten Seite beschrieben wird.
</li>
77 <li>Die Python-Version verwendet jetzt die Objektmethoden des String-Datentyps anstatt der Methoden aus dem
<tt>string
</tt>-Modul.
</li>
78 <li>Die Python-Version kommt jetzt vollst
ändig ohne regul
äre Ausdr
ücke aus.
</li>
81 <li><b>Dokumentation neu strukturiert:
</b><br />
82 Die Dokumentation wurde komplett neu strukturiert. Sie befindet sich nun im Unterverzeichnis
<i>doc
</i> und besteht aus mehreren Dateien.
</li>
85 <p><b>Neu in Version
1.5a
</b> (vom
6.6.2005)
</p>
88 <li><b>PHP-Version nun ohne
"Notices
":
</b><br />
89 Die PHP-Version der Template-Klasse hat eine
"Notice
" erzeugt, wenn f
ür
<code>error_reporting
</code> der Wert
<code>E_ALL
</code> eingestellt war.
</li>
90 <li><b>Fehlermeldung bei komplett leerer Template-Datei:
</b><br />
91 Wenn die PHP-Version der Klasse eine Template-Datei mit einer Gr
öße von
0 Bytes h
ätte einlesen sollen, hatte
<code>fread()
</code> eine Fehlermeldung erzeugt. Das ist nun behoben.
</li>
94 <p><b>Neu in Version
1.5</b> (vom
5.5.2005)
</p>
97 <li><b><code>{IF}
</code>-Bl
öcke verneinen:
</b><br />
98 Man kann
<code>{IF}
</code>-Bl
öcke nun verneinen, indem man vor den Namen des Blockes ein
<code>!
</code> stellt. Die Methode
<code>parse_if_block()
</code> verarbeitet diese Bl
öcke automatisch, es sei denn man setzt den neuen dritten Parameter dieser Routine auf
<i>true
</i>.
</li>
99 <li><b>Fehlende
<code>{INCLUDE}
</code>-Dateien:
</b><br />
100 Wenn eine Datei
über eine
<code>{INCLUDE}
</code>-Anweisung eingebunden werden soll und die Datei existiert nicht, so wird diese Anweisung nicht mehr aus dem Vorlagentext entfernt.
</li>
101 <li><b>Python-Version:
</b><br />
102 Es existiert nun ebenfalls eine
<a href=
"http://www.python.org/" target=
"_blank">Python
</a>-Version der Template-Klasse. Von den Perl- und PHP-Versionen unterscheidet sie sich lediglich dadurch, dass sie nicht die Alias-Methoden bereitstellt (Methodennamen vor Version
1.2).
</li>
105 <p><b>Neu in Version
1.4a
</b> (vom
21.3.2005)
</p>
108 <li><b>Mehrere
<code>{ENDIF}
</code> am Ende des Vorlagentextes:
</b><br />
109 Wenn der Vorlagentext mit mehr als einem
<code>{ENDIF}
</code> endete, hat der
<code>{IF}
</code>-Parser der Perl-Version diese nicht gefunden und das Script wegen eines Verschachtelungsfehlers beendet.
</li>
110 <li><b>(Mal wieder) Nicht funktionierender Alias in PHP-Fassung:
</b><br />
111 F
ür die Methode
<code>add_text()
</code> existiert aus Kompatibilit
ätsgr
ünden ein Alias namens
<code>addtext()
</code>. In der PHP-Version der Klasse wurden die Argumente, die
<code>addtext()
</code> übergeben wurden, nicht an
<code>add_text()
</code> weitergegeben.
</li>
114 <p><b>Neu in Version
1.4</b> (vom
5.2.2005)
</p>
117 <li><b>Verschachtelungsfehler bei
<code>{IF}
</code>-Bl
öcken:
</b><br />
118 Bisher geriet der
<code>{IF}
</code>-Parser immer in eine Endlosschleife, wenn die
<code>{IF}
</code>-Bl
öcke nicht korrekt verschachtelt waren.
<br />
119 Das d
ürfte jetzt behoben sein. Der Parser pr
üft jetzt, ob intern das letzte
<code>{ENDIF}
</code> überschritten wurde. In diesem Fall wird das Script sofort mit einer Fehlermeldung beendet.
</li>
120 <li><b>Suchen von
<code>{IF}
</code>-Bl
öcken in
<code>{IF}
</code>-Bl
öcken
</b>:
<br />
121 Um einen weiteren
<code>{IF}
</code>-Block in einem
<code>{IF}
</code>-Block zu erkennen, wird jetzt nicht mehr nach
<code>{IF
</code>, sondern nach
<code>{IF
</code> gesucht.
<br />
122 Das ist zwar immer noch nicht das, was ich eigentlich will, aber es ist etwas besser als die alte Methode. Ich w
ürde es ja gerne mit einem regul
ären Ausdruck l
ösen, der nach
<code>\{IF
.+?\}
</code> oder so sucht, aber das hat nur noch mehr Probleme bereitet.
</li>
123 <li><b>Einfache Anf
ührungszeichen statt doppelter:
</b><br />
124 Es wurden, wo es angebracht war, alle doppelten Anf
ührungszeichen durch einfache ersetzt. Das bringt hoffentlich einen Geschwindigkeitsgewinn.
</li>
125 <li><b>Name der Template-Datei in den Objekteigenschaften:
</b><br />
126 Der Name der von
<code>read_file()
</code> eingelesenen Template-Datei wird jetzt in den Objekteigenschaften gespeichert.
</li>
129 <p><b>Neu in Version
1.3</b> (vom
20.5.2004)
</p>
132 <li><b><code>{INCLUDE}
</code>-Anweisungen:
</b><br />
133 Es ist nun m
öglich, in einer Vorlage
<code>{INCLUDE Dateiname}
</code>-Anweisungen einzubauen. Die Anweisungen werden beim Einlesen der Vorlagen-Datei durch den Inhalt der angegebenen Datei ersetzt.
<br />
134 Das Verarbeiten der
<code>{INCLUDE}
</code>-Anweisungen l
ässt sich auch von Hand durchf
ühren und das automatische Verarbeiten beim Lesen einer Datei l
ässt sich auch verhindern.
</li>
135 <li><b><code>to_file()
</code>:
</b><br />
136 Mit der neuen Methode
<code>to_file()
</code> ist es m
öglich, den kompletten Vorlagentext in eine zuvor ge
öffnete Datei zu schreiben.
</li>
137 <li><b>Nicht funktionierender Alias in PHP-Fassung:
</b><br />
138 F
ür die Methode
<code>add_text()
</code> existiert aus Kompatibilit
ätsgr
ünden ein Alias namens
<code>addtext()
</code>. In der PHP-Version der Klasse rief dieser Alias jedoch nicht
<code>add_text()
</code> auf, sondern die nicht existierende Methode
<code>add_template()
</code>.
</li>
141 <p><b>Neu in Version
1.2a
</b> (vom
12.9.2003)
</p>
144 <li><b>Fehler in
<code>substr_count()
</code>:
</b><br />
145 Die von der Perl-Version der Klasse emulierte PHP-Funktion
<code>substr_count()
</code> enthielt einen Fehler. Wenn sich der zu suchende am Ende des zu durchsuchenden Strings befand, wurde er nicht gefunden.
<br />
146 Die richtige Methode, Strings in Strings zu z
ählen, wurde
<tt>perlfaq4
</tt> entnommen.
</li>
149 <p><b>Neu in Version
1.2</b> (vom
9.9.2003)
</p>
152 <li><b>Methoden umbenannt:
</b><br />
153 (Fast) Alle Methoden dieser Klasse haben neue, intelligentere Namen erhalten. Hier die neuen Namen im Einzelnen:
<br />
154 <code>addtext()
</code> =
> <code>add_text()
</code><br />
155 <code>as_string()
</code> =
> <code>get_template()
</code><br />
156 <code>condtag()
</code> =
> <code>parse_condtag()
</code><br />
157 <code>readin()
</code> =
> <code>read_file()
</code><br />
158 Die alten Namen lassen sich selbstverst
ändlich weiterhin verwenden. Das k
önnte sich aber irgendwann
ändern.
</li>
159 <li><b>ELSE hinzugef
ügt:
</b><br />
160 Die IF-Syntax versteht nun auch
<code>{ELSE}
</code>-Abschnitte, die angezeigt werden, wenn die Bedingung nicht erf
üllt ist.
</li>
161 <li><b>Variablen durch Array ersetzen:
</b><br />
162 Mit der neuen Funktion
<code>fillin_array()
</code> ist es nun m
öglich, Variablen durch Arrays zu ersetzen.
</li>
163 <li><b><code>get_template()
</code> und
<code>set_template()
</code>:
</b><br />
164 Mit Hilfe der neuen Methoden
<code>get_template()
</code> und
<code>set_template()
</code> ist es viel leichter geworden, auf den in den Objekt-Eigenschaften gespeicherten Vorlagentext zuzugreifen.
</li>
165 <li><b>Emuliertes
<code>substr_count()
</code> überarbeitet:
</b><br />
166 Die von der Perl-Fassung der Klasse emulierte PHP-Funktion
<code>substr_count()
</code> wurde ein wenig verbessert. Sie teilt zun
ächst die Zeichenkette mit der zu z
ählenden Zeichenkette auf. Anschlie
ßend z
ählt sie von der Anzahl der so entstandenen Array-Elemente
1 ab und gibt das Ergebnis zur
ück.
</li>
167 <li><b>Keine regul
äre Ausdr
ücke mehr in der PHP-Version:
</b><br />
168 Die PHP-Version der Klasse verwendet nun keine regul
äre Ausdr
ücke mehr, was hoffentlich zu einer Geschwindigkeitsverbesserung f
ührt.
</li>
171 <p><b>Neu in Version
1.1</b> (vom
21.7.2003)
</p>
174 <li><b>Neue IF-Syntax:
</b><br />
175 Es wird jetzt eine viel
übersichtlichere Syntax f
ür bedingte Abschnitte verwendet. Diese Abschnitte werden mit einem
<code>{IF}
</code> eingeleitet und von einem
<code>{ENDIF}
</code> abgeschlossen.
</li>
176 <li><b>CondTag am Anfang:
</b><br />
177 Wenn ein CondTag-Abschnitt am Anfang eines Textes war, hat die PHP-Version diesen nicht erkannt, da die
0 als
<i>false
</i> interpretiert wurde.
</li>
180 <p><b>Neu in Version
1.0</b> (vom
3.6.2003)
</p>
183 <li><b>Erste Version:
</b><br />
184 Dies ist die erste Version der Template-Klasse. Sie erschien mit der Version
1.3 des
<a href=
"http://www.patshaping.de/redirector/redirect.php?page=guestbook" target=
"_blank"><i>Guestbook
</i></a> und wurde nicht offiziell zum Download angeboten.
</li>
187 <hr width=
"80%" noshade=
"noshade" />
189 <p><a href=
"index.htm">Zur
Übersicht
</a></p>
191 <hr width=
"80%" noshade=
"noshade" />
193 <p style=
"font-size:8pt">© 2002-
2011 Patrick Canterino
</p>
195 <table border=
"0" cellspacing=
"0" style=
"font-size:8pt">
198 <td><a href=
"http://www.patshaping.de/">http://www.patshaping.de/
</a></td>
201 <td><a name=
"bottom" id=
"bottom">E-Mail:
</a></td>
202 <td><a href=
"mailto:patrick@patshaping.de">patrick@patshaping.de
</a></td>