sync with en

This commit is contained in:
messju
2005-06-10 09:32:59 +00:00
parent 26d51166b9
commit 93c5f9f83b
2 changed files with 85 additions and 52 deletions

View File

@@ -1,11 +1,29 @@
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready --> <!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: andreas Status: ready -->
<!ENTITY note.parameter.merge '<note> <!ENTITY note.parameter.merge '<note>
<title>Technische Bemerkung</title> <title>Technische Bemerkung</title>
<para> <para>
Der <parameter>merge</parameter> Parameter ber&uuml;ksichtigt Array Keys. Das bedeutet, dass numerisch indizierte Arrays sich gegenseitig &uuml;berschreiben k&ouml;nnen, oder die Keys nicht sequentiell ausgegeben werden. Dies, im Gegensatz zur PHP Funktion array_merge(), die numerische Keys neu sortiert. Der <parameter>merge</parameter> Parameter ber&uuml;ksichtigt Array
Keys. Das bedeutet, dass numerisch indizierte Arrays sich
gegenseitig &uuml;berschreiben k&ouml;nnen, oder die Keys nicht
sequentiell ausgegeben werden. Dies, im Gegensatz zur PHP Funktion
<ulink url="&url.php-manual;array_merge">array_merge()</ulink>, die
numerische Keys neu sortiert.
</para> </para>
</note>'> </note>'>
<!ENTITY parameter.compileid '<para> <!ENTITY parameter.compileid '<para>
Als optionaler dritter Parameter, k&ouml;nnen sie die <parameter>compile_id</parameter> angeben. Dies ist sinnvoll, wenn Sie verschiedene Versionen der komipilerten Templates f&uuml;r verschiedene Sprachen unterhalten wollen. Weiter ist dieser Parameter n&uuml;tzlich, wenn Sie mehrere $template_dir Verzeichnisse, aber nur ein $compile_dir nutzen. Setzen Sie <parameter>compile_id</parameter> f&uuml;r jedes Template Verzeichnis, da gleichnamige Templates sich sonst &uuml;berschreiben. Sie k&ouml;nnen die <link linkend="variable.compile.id">$compile_id</link> auch nur einmal, global setzen. Als optionaler dritter Parameter, k&ouml;nnen sie die
<parameter>$compile_id</parameter> angeben. Dies ist sinnvoll, wenn
Sie verschiedene Versionen der komipilerten Templates f&uuml;r
verschiedene Sprachen unterhalten wollen. Weiter ist dieser Parameter
n&uuml;tzlich, wenn Sie mehrere
<link linkend="variable.template.dir">$template_dir</link> Verzeichnisse,
aber nur ein <link linkend="variable.compile.dir">$compile_dir</link>
nutzen. Setzen Sie <parameter>$compile_id</parameter> f&uuml;r jedes
Template Verzeichnis, da gleichnamige Templates sich sonst
&uuml;berschreiben. Sie k&ouml;nnen die
<link linkend="variable.compile.id">$compile_id</link> auch nur einmal,
global setzen.
</para>'> </para>'>

View File

@@ -4,61 +4,76 @@
<preface id="preface"> <preface id="preface">
<title>Vorwort</title> <title>Vorwort</title>
<para> <para>
Die Frage, wie man die Applikations-Logik eines PHP-Scriptes vom Layout trennt, ist unzweifelhaft Die Frage, wie man die Applikations-Logik eines PHP-Scriptes vom
eines der am h&auml;figsten diskutierten Themen. Da PHP als Layout trennt, ist unzweifelhaft eines der am h&auml;figsten
"in HTML eingebettete Scripting-Sprache" angepriesen wird, ergibt sich diskutierten Themen. Da PHP als "in HTML eingebettete
nach einigen Projekten in denen man HTML und PHP gemischt hat schnell die Idee, Scripting-Sprache" angepriesen wird, ergibt sich nach einigen
Funktionalit&auml;t und Darstellung zu trennen. Dazu kommt, dass in vielen Firmen Applikationsentwickler Projekten in denen man HTML und PHP gemischt hat schnell die Idee,
und Designer nicht die selbe Person sind. In Konsequenz beginnt die Suche nach einer Template-L<>sung. Funktionalit&auml;t und Darstellung zu trennen. Dazu kommt, dass in
vielen Firmen Applikationsentwickler und Designer nicht die selbe
Person sind. In Konsequenz beginnt die Suche nach einer
Template-L<>sung.
</para> </para>
<para> <para>
Als Beispiel: In unserer Firma funktioniert die Entwicklung einer Applikation Als Beispiel: In unserer Firma funktioniert die Entwicklung einer
wie folgt: Nachdem die Spezifikationen erstellt sind, entwickelt der Applikation wie folgt: Nachdem die Spezifikationen erstellt sind,
Interface Designer einen Prototypen des Interfaces und &uuml;bergibt dieses entwickelt der Interface Designer einen Prototypen des Interfaces
dem Programmierer. Der Programmierer implementiert die Gesch&auml;ftslogik und &uuml;bergibt dieses dem Programmierer. Der Programmierer
in PHP und verwendet den Interface-Prototypen zur Erstellung eines Template-Skeletts. implementiert die Gesch&auml;ftslogik in PHP und verwendet den
Danach &uuml;bergibt der Programmierer die Templates dem HTML/Webseiten-Designer Interface-Prototypen zur Erstellung eines Template-Skeletts.
welcher ihnen den letzten Schliff verleiht. Das Projekt kann mehrfach zwischen Danach &uuml;bergibt der Programmierer die Templates dem
dem Programmieren und dem Designer ausgetauscht werden. Deshalb ist es wichtig, HTML/Webseiten-Designer welcher ihnen den letzten Schliff
dass die Trennung von Logik und Design klar stattfindet. Der Programmierer will verleiht. Das Projekt kann mehrfach zwischen dem Programmieren und
sich normalerweise nicht mit HTML herumschlagen m&uuml;ssen und m&ouml;chte auch dem Designer ausgetauscht werden. Deshalb ist es wichtig, dass die
nicht, dass der Designer seinen PHP-Code ver&auml;ndert. Designer selbst Trennung von Logik und Design klar stattfindet. Der Programmierer
ben&ouml;tigen Konfigurationsdateien, dynamische Bl&ouml;cke und andere Interface spezifische will sich normalerweise nicht mit HTML herumschlagen m&uuml;ssen
Eigenheiten, m&ouml;chten aber auch nicht direkt mit PHP in Ber&uuml;hrung kommen. und m&ouml;chte auch nicht, dass der Designer seinen PHP-Code
ver&auml;ndert. Designer selbst ben&ouml;tigen
Konfigurationsdateien, dynamische Bl&ouml;cke und andere Interface
spezifische Eigenheiten, m&ouml;chten aber auch nicht direkt mit
PHP in Ber&uuml;hrung kommen.
</para> </para>
<para> <para>
Die meisten Template-Engines die heutzutage angeboten werden, bieten eine Die meisten Template-Engines die heutzutage angeboten werden,
rudiment&auml;re M&ouml;glichkeit Variablen in einem Template zu ersetzen bieten eine rudiment&auml;re M&ouml;glichkeit Variablen in einem
und beherschen eine eingeschr&auml;nkte Funktionalit&auml;t f&uuml;r dynamische Template zu ersetzen und beherschen eine eingeschr&auml;nkte
Bl&ouml;cke. Unsere Anforderungen forderten jedoch ein wenig mehr. Wir wollten Funktionalit&auml;t f&uuml;r dynamische Bl&ouml;cke. Unsere
erreichen, dass sich Programmierer &uuml;berhaupt nicht um HTML Layouts Anforderungen forderten jedoch ein wenig mehr. Wir wollten
k&uuml;mmern m&uuml;ssen. Dies war aber fast unumg&auml;nglich. Wenn ein erreichen, dass sich Programmierer &uuml;berhaupt nicht um HTML
Designer zum Beispiel alternierende Farben in einer Tabelle einsetzen wollte, Layouts k&uuml;mmern m&uuml;ssen. Dies war aber fast
musste dies vorhergehend mit dem Programmierer abgesprochen werden. Wir wollten unumg&auml;nglich. Wenn ein Designer zum Beispiel alternierende
weiter, dass dem Designer Konfigurationsdateien zur Verf&uuml;gung st&uuml;nden, Farben in einer Tabelle einsetzen wollte, musste dies vorhergehend
aus denen er Variablen f&uuml;r seine Templates extrahieren kann. Die Liste ist endlos. mit dem Programmierer abgesprochen werden. Wir wollten weiter, dass
dem Designer Konfigurationsdateien zur Verf&uuml;gung st&uuml;nden,
aus denen er Variablen f&uuml;r seine Templates extrahieren
kann. Die Liste ist endlos.
</para> </para>
<para> <para>
Wir begannen 1999 mit der Spezifikation der Template Engine. Nachdem dies Wir begannen 1999 mit der Spezifikation der Template
erledigt war, fingen wir an eine Engine in C zu schreiben, die - so hofften Engine. Nachdem dies erledigt war, fingen wir an eine Engine in C
wir - in PHP eingebaut w&uuml;rde. Nach einer hitzigen Debatte dar&uuml;ber zu schreiben, die - so hofften wir - in PHP eingebaut
was eine Template Engine k&ouml;nnen sollte und was nicht, und nachdem wir feststellen w&uuml;rde. Nach einer hitzigen Debatte dar&uuml;ber was eine
mussten, dass ein paar komplizierte technische Probleme auf uns zukommen Template Engine k&ouml;nnen sollte und was nicht, und nachdem wir
w&uuml;rden, entschlossen wir uns die Template Engine in PHP als Klasse feststellen mussten, dass ein paar komplizierte technische Probleme
zu realisieren, damit sie von jederman verwendet und angepasst werden kann. auf uns zukommen w&uuml;rden, entschlossen wir uns die Template
So schrieben wir also eine Engine, die wir <productname>SmartTemplate</productname> Engine in PHP als Klasse zu realisieren, damit sie von jederman
nannten (anm: diese Klasse wurde nie ver&ouml;ffentlicht). SmartTemplate verwendet und angepasst werden kann. So schrieben wir also eine
erlaubte uns praktisch alles zu tun was wir uns vorgenommen hatten: normale Engine, die wir <productname>SmartTemplate</productname> nannten
Variablen-Ersetzung, M&ouml;glichkeiten weitere Templates einzubinden, (anm: diese Klasse wurde nie ver&ouml;ffentlicht). SmartTemplate
Integration von Konfigurationsdateien, Einbetten von PHP-Code, limitierte 'if'-Funktionalit&auml;t erlaubte uns praktisch alles zu tun was wir uns vorgenommen hatten:
und eine sehr robuste Implementation von dynamischen Bl&ouml;cken die normale Variablen-Ersetzung, M&ouml;glichkeiten weitere Templates
mehrfach verschachtelt werden konnten. All dies wurde mit Regul&auml;ren Ausdr&uuml;cken einzubinden, Integration von Konfigurationsdateien, Einbetten von
erledigt und der Sourcecode wurde ziemlich un&uuml;bersichtlich. F&uuml;r gr&ouml;ssere PHP-Code, limitierte 'if'-Funktionalit&auml;t und eine sehr robuste
Applikationen war die Klasse auch bemerkenswert langsam, da das Parsing bei jedem Implementation von dynamischen Bl&ouml;cken die mehrfach
Aufruf einer Seite durchlaufen werden musste. Das gr&ouml;sste Problem aber war, verschachtelt werden konnten. All dies wurde mit Regul&auml;ren
dass der Programmierer das Setup, die Templates und dynamische Bl&ouml;cke in seinem Ausdr&uuml;cken erledigt und der Sourcecode wurde ziemlich
PHP-Skript definieren musste. Die n&auml;chste Frage war: wie k&ouml;nnen wir dies un&uuml;bersichtlich. F&uuml;r gr&ouml;ssere Applikationen war die
weiter vereinfachen? Klasse auch bemerkenswert langsam, da das Parsing bei jedem Aufruf
einer Seite durchlaufen werden musste. Das gr&ouml;sste Problem
aber war, dass der Programmierer das Setup, die Templates und
dynamische Bl&ouml;cke in seinem PHP-Skript definieren musste. Die
n&auml;chste Frage war: wie k&ouml;nnen wir dies weiter
vereinfachen?
</para> </para>
<para> <para>
Dann kam uns die Idee, aus der schlie<69>lich Smarty wurde. Wir wussten Dann kam uns die Idee, aus der schlie<69>lich Smarty wurde. Wir wussten