mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-06 03:14:27 +02:00
sync with en
This commit is contained in:
@@ -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üksichtigt Array Keys. Das bedeutet, dass numerisch indizierte Arrays sich gegenseitig überschreiben kö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üksichtigt Array
|
||||||
|
Keys. Das bedeutet, dass numerisch indizierte Arrays sich
|
||||||
|
gegenseitig überschreiben kö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önnen sie die <parameter>compile_id</parameter> angeben. Dies ist sinnvoll, wenn Sie verschiedene Versionen der komipilerten Templates für verschiedene Sprachen unterhalten wollen. Weiter ist dieser Parameter nützlich, wenn Sie mehrere $template_dir Verzeichnisse, aber nur ein $compile_dir nutzen. Setzen Sie <parameter>compile_id</parameter> für jedes Template Verzeichnis, da gleichnamige Templates sich sonst überschreiben. Sie können die <link linkend="variable.compile.id">$compile_id</link> auch nur einmal, global setzen.
|
Als optionaler dritter Parameter, können sie die
|
||||||
|
<parameter>$compile_id</parameter> angeben. Dies ist sinnvoll, wenn
|
||||||
|
Sie verschiedene Versionen der komipilerten Templates für
|
||||||
|
verschiedene Sprachen unterhalten wollen. Weiter ist dieser Parameter
|
||||||
|
nü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ür jedes
|
||||||
|
Template Verzeichnis, da gleichnamige Templates sich sonst
|
||||||
|
überschreiben. Sie können die
|
||||||
|
<link linkend="variable.compile.id">$compile_id</link> auch nur einmal,
|
||||||
|
global setzen.
|
||||||
</para>'>
|
</para>'>
|
||||||
|
@@ -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äfigsten diskutierten Themen. Da PHP als
|
Layout trennt, ist unzweifelhaft eines der am hä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ä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ä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 übergibt dieses
|
entwickelt der Interface Designer einen Prototypen des Interfaces
|
||||||
dem Programmierer. Der Programmierer implementiert die Geschäftslogik
|
und übergibt dieses dem Programmierer. Der Programmierer
|
||||||
in PHP und verwendet den Interface-Prototypen zur Erstellung eines Template-Skeletts.
|
implementiert die Geschäftslogik in PHP und verwendet den
|
||||||
Danach ü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 ü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üssen und möchte auch
|
dem Designer ausgetauscht werden. Deshalb ist es wichtig, dass die
|
||||||
nicht, dass der Designer seinen PHP-Code verändert. Designer selbst
|
Trennung von Logik und Design klar stattfindet. Der Programmierer
|
||||||
benötigen Konfigurationsdateien, dynamische Blöcke und andere Interface spezifische
|
will sich normalerweise nicht mit HTML herumschlagen müssen
|
||||||
Eigenheiten, möchten aber auch nicht direkt mit PHP in Berührung kommen.
|
und möchte auch nicht, dass der Designer seinen PHP-Code
|
||||||
|
verändert. Designer selbst benötigen
|
||||||
|
Konfigurationsdateien, dynamische Blöcke und andere Interface
|
||||||
|
spezifische Eigenheiten, möchten aber auch nicht direkt mit
|
||||||
|
PHP in Berü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äre Möglichkeit Variablen in einem Template zu ersetzen
|
bieten eine rudimentäre Möglichkeit Variablen in einem
|
||||||
und beherschen eine eingeschränkte Funktionalität für dynamische
|
Template zu ersetzen und beherschen eine eingeschränkte
|
||||||
Blöcke. Unsere Anforderungen forderten jedoch ein wenig mehr. Wir wollten
|
Funktionalität für dynamische Blöcke. Unsere
|
||||||
erreichen, dass sich Programmierer überhaupt nicht um HTML Layouts
|
Anforderungen forderten jedoch ein wenig mehr. Wir wollten
|
||||||
kümmern müssen. Dies war aber fast unumgänglich. Wenn ein
|
erreichen, dass sich Programmierer überhaupt nicht um HTML
|
||||||
Designer zum Beispiel alternierende Farben in einer Tabelle einsetzen wollte,
|
Layouts kümmern müssen. Dies war aber fast
|
||||||
musste dies vorhergehend mit dem Programmierer abgesprochen werden. Wir wollten
|
unumgänglich. Wenn ein Designer zum Beispiel alternierende
|
||||||
weiter, dass dem Designer Konfigurationsdateien zur Verfügung stünden,
|
Farben in einer Tabelle einsetzen wollte, musste dies vorhergehend
|
||||||
aus denen er Variablen für seine Templates extrahieren kann. Die Liste ist endlos.
|
mit dem Programmierer abgesprochen werden. Wir wollten weiter, dass
|
||||||
|
dem Designer Konfigurationsdateien zur Verfügung stünden,
|
||||||
|
aus denen er Variablen fü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ürde. Nach einer hitzigen Debatte darüber
|
zu schreiben, die - so hofften wir - in PHP eingebaut
|
||||||
was eine Template Engine können sollte und was nicht, und nachdem wir feststellen
|
würde. Nach einer hitzigen Debatte darüber was eine
|
||||||
mussten, dass ein paar komplizierte technische Probleme auf uns zukommen
|
Template Engine können sollte und was nicht, und nachdem wir
|
||||||
wü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ü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ö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öglichkeiten weitere Templates einzubinden,
|
(anm: diese Klasse wurde nie veröffentlicht). SmartTemplate
|
||||||
Integration von Konfigurationsdateien, Einbetten von PHP-Code, limitierte 'if'-Funktionalität
|
erlaubte uns praktisch alles zu tun was wir uns vorgenommen hatten:
|
||||||
und eine sehr robuste Implementation von dynamischen Blöcken die
|
normale Variablen-Ersetzung, Möglichkeiten weitere Templates
|
||||||
mehrfach verschachtelt werden konnten. All dies wurde mit Regulären Ausdrücken
|
einzubinden, Integration von Konfigurationsdateien, Einbetten von
|
||||||
erledigt und der Sourcecode wurde ziemlich unübersichtlich. Für grössere
|
PHP-Code, limitierte 'if'-Funktionalität und eine sehr robuste
|
||||||
Applikationen war die Klasse auch bemerkenswert langsam, da das Parsing bei jedem
|
Implementation von dynamischen Blöcken die mehrfach
|
||||||
Aufruf einer Seite durchlaufen werden musste. Das grösste Problem aber war,
|
verschachtelt werden konnten. All dies wurde mit Regulären
|
||||||
dass der Programmierer das Setup, die Templates und dynamische Blöcke in seinem
|
Ausdrücken erledigt und der Sourcecode wurde ziemlich
|
||||||
PHP-Skript definieren musste. Die nächste Frage war: wie können wir dies
|
unübersichtlich. Für grössere Applikationen war die
|
||||||
weiter vereinfachen?
|
Klasse auch bemerkenswert langsam, da das Parsing bei jedem Aufruf
|
||||||
|
einer Seite durchlaufen werden musste. Das grösste Problem
|
||||||
|
aber war, dass der Programmierer das Setup, die Templates und
|
||||||
|
dynamische Blöcke in seinem PHP-Skript definieren musste. Die
|
||||||
|
nächste Frage war: wie kö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
|
||||||
|
Reference in New Issue
Block a user