Zum Inhalt springen

Kategorie:Sportschütze (Norwegen) und Template-Engine: Unterschied zwischen den Seiten

aus Wikipedia, der freien Enzyklopädie
(Unterschied zwischen Seiten)
Inhalt gelöscht Inhalt hinzugefügt
TXiKiBoT (Diskussion | Beiträge)
 
Maschine passt besser als Motor: hier wird nichts angetrieben, sondern etwas verarbeitet.
 
Zeile 1: Zeile 1:
Eine '''Template Engine''' (von [[Englische Sprache|engl.]] ''Vorlage'' und ''Maschine'') ist eine [[Software]], die eine Datei (das ''[[Vorlage (Datenverarbeitung)|Template]]'') verarbeitet, und bestimmte Platzhalter darin mit jeweils aktuellen Inhalten füllt. Die Bezeichnungen ''Templateklasse'' und ''Templatesystem'' werden oft als [[Synonym]] für eine Template Engine verwendet.
[[Kategorie:Sportler (Norwegen)]]
[[Kategorie:Sportschütze|Norwegen]]


''[[Template (Programmierung)#Klassentemplates|Klassentemplates]]'' in der [[C++]]-Programmierung sind dagegen nicht mit Template Engines vergleichbar, weil sie eine vom [[Datentyp]] unabhängige Programmierung ermöglichen und ganze [[Klasse (objektorientierte Programmierung)|Klassen]] enthalten.
[[en:Category:Norwegian sport shooters]]

[[fi:Luokka:Norjalaiset ampujat]]
In den Templates einer Template Engine sollte kein Programm-Code enthalten sein. [[Kontrollstruktur]]en (wie IF) sind allerdings oft in Templates möglich und verbreitet.
[[fr:Catégorie:Tireur sportif norvégien]]

[[nn:Kategori:Norske skyttarar]]
Typische Dateitypen, die verarbeitet werden, sind [[HTML]], Text ([[ASCII]] oder [[Unicode]]), [[XML]] oder [[TeX]].
[[no:Kategori:Norske skyttere]]

[[ru:Категория:Стрелки Норвегии]]
== Konzept ==
[[sr:Категорија:Норвешки стрелци]]

[[sv:Kategori:Norska sportskyttar]]
Das Konzept ähnelt den [[Seriendruck]]feldern bei einer [[Textverarbeitung]]: In einem Dokument werden Seriendruckfelder (Platzhalter) eingefügt, etwa ''Name – Straße – Ort''. Bei Template Engines werden diese Seriendruckfelder ''Templatevariablen'' genannt. Wenn aus dem Dokument dann mehrere Serienbriefe erzeugt werden, steht anstatt der Templatevariablen ''name'' ein realer Name wie „[[Erika Mustermann]]“ im fertigen Serienbrief.
[[zh:Category:挪威射击运动员]]

Das Dokument muss nur einmal geschrieben und formatiert werden. Alle Änderungen wirken sich automatisch auf zukünftig erstellte Serienbriefe aus. Das ist bei Template Engines genauso; weitere Parallelen zu Serienbrief-Vorlagen sind:

* Die Daten kommen aus einer externen Quelle ([[Datenbank]], [[Tabellenkalkulation]], etc.).
* Um die Daten zu ändern, muss das Template nicht verändert werden, und umgekehrt.
* Das Template kann wiederverwendet werden.

=== Abgrenzung ===

Template Engines werden häufig von [[Programmierer]]n eingesetzt, um im Kontext von [[Webanwendung|Web-Applikationen]] Programm-Code (einer [[Programmiersprache]]) vom Design zu trennen. Genauso wird von den Herstellern mancher Template Engines angeführt, Templates und Engines sollen durch die Trennung der Programmierlogik vom Design das Skript von HTML-Code befreien und damit übersichtlicher machen.

Demgegenüber steht der ursprüngliche Gedanke der Template Engines: Sie sollen statischen Text und dynamische Inhalte möglichst effizient miteinander verknüpfen. Oft sind Template Engines deshalb gerade in Programmiersprachen anzutreffen, deren Syntax eine solche Mischung nicht direkt unterstützt (z. B. Java: [[JSP]]; VBScript u. a.: [[Active Server Pages|ASP]]).

Für eine echte Trennung der Darstellung von den Datenmodellen und den Logikkomponenten sind Template Engines dagegen ungeeignet und es sind zusätzliche Konzepte wie z. B. [[Model View Controller]] notwendig.

=== Vorteile ===

* Programm-Code (PHP, Python, Perl, etc.) wird vom [[Auszeichnungssprache|Markup]] (HTML) getrennt
* Designer und Programmierer können gleichzeitig an einem Projekt arbeiten
* [[WYSIWYG]]-Editoren können verwendet werden

=== Nachteile ===

Template Engines

* erzeugen immer zusätzlichen [[Overhead (EDV)|Overhead]].
* müssen im Gebrauch erlernt werden. Oft sind grundlegende Kenntnisse der [[Objektorientierte Programmierung|objektorientierten Programmierung]] Voraussetzung.
* sind auf eine textuelle Ausgabe beschränkt.

== Sprachunabhängige Template-Engines ==
=== TAL/ZPT ===
Für den Web-Anwendungsserver [[Zope (Webanwendungsserver)|Zope]] wurden die [[Zope Page Templates]] zunächst in [[Python (Programmiersprache)|Python]] entwickelt, die jedoch von Anfang an sprachunabhängig ausgelegt waren. Diese verwenden die folgenden Technologien:

; [[Template Attribute Language]] (TAL)
: verwendet spezielle ''Attribute'' (daher Template ''Attribute'' Language, in etwa: Attributbasierte Schablonensprache) mit dem Präfix <code>tal:</code>, um [[SGML-Element|Element]]e zu füllen oder zu ersetzen, Schleifen zu realisieren oder Bedingungen zu überprüfen. (Stets sprachspezifischer) Programmcode in [[Verarbeitungsanweisung]]en, außerhalb der üblichen Elemente, ist nicht nötig ([[Template Attribute Language#Überblick|Beispiel]])
; [[Template Attribute Language Expression Syntax|TAL Expression Syntax]] (TALES)
: die einzige Komponente, die programmiersprachabhängige Inhalte erlaubt (nicht aber erfordert); beschreibt die Syntax der Attributwerte: eine Python-Implementierung wird sehr wahrscheinlich (aber nicht notwendigerweise) Python-Ausdrücke erlauben. Für die allermeisten Anwendungen reicht es, sprachunabhängige Pfadausdrücke zu verwenden ([[Template Attribute Language Expression Syntax#Beispiele|Beispiele]])
; [[Macro Expansion Template Attribute Language|Macro Expansion TAL]] (METAL)
: Erlaubt die Wiederverwendung von Code in anderen Templates; ebenfalls eine ''Template Attribute Language,'' Präfix: <code>metal:</code>
; [[i18n TAL]]
: Mittels des i18n-Namensraums (also des Attribut-Präfix <code>i18n:</code>) und [[GNU gettext]] lassen sich sprachabhängige Ausgaben erzeugen.

Es können [[HTML]]-Dokumente und [[XML]] aller Spielarten incl. [[XHTML]] generiert werden; bei korrekter Deklarierung der [[XML-Namensraum|Namensräume]] sind die XML-Templates validierbar und lassen sich mit allen modernen Designwerkzeugen bearbeiten. Auch bei HTML-Templates wird [[Wohlgeformtheit]] (gemäß den HTML-Regeln) garantiert; andernfalls würden sie sich nicht übersetzen lassen. Templates können leicht mit echt aussehenden Dummy-Inhalten ausgestattet werden, um dem Designer einen realistischen Eindruck zu geben;
dieser darf sogar eigene Dummydaten hinzufügen, die vom Programmierer dann auf einfache Weise ausgeblendet werden können.

Es existieren Implementierungen für Python, [[Java (Programmiersprache)|Java]], [[Perl (Programmiersprache)|Perl]], [[PHP]] und [[XSL]] (Transformation von TAL in ein [[XSLT]]-Template); eine (möglicherweise unvollständige) Liste findet sich [[Template Attribute Language#Andere Implementierungen|hier]].

=== XSL/XSLT ===
Diese Version ist leistungsstark und überaus komplex.

; XSL
: [[Extensible Stylesheet Language]]
; XSLT
: [[XSL Transformation]], eine turing-vollständige Programmiersprache zur Transformation von XML-Dokumenten

== Sprachabhängige Template-Engines ==

Die Masse von Template Engines ist enorm. Eigenentwicklungen sind an der Tagesordnung. XSLT ist für alle Template Engines eine Konkurrenz. Bei PHP ist ''Smarty'' weit verbreitet, hat aber die Eigenentwicklungen und andere Template Engines nicht vom Markt verdrängt.

=== PHP Template Engines ===

PHP selbst ist bereits so entworfen, dass man programmiersprachliche Konstrukte mit der textuellen Ausgabe über Platzhalter bzw. gekennzeichnete Bereiche mischen kann. Die Verwendung einer gesonderten Template Engine für PHP ist deswegen eigentlich nicht erforderlich. Dennoch existieren gerade für PHP eine sehr große Zahl von Engines:

* [[Smarty]] ([http://www.smarty.net/ extern])
* [[FLOW3#Fluid_Template_Engine|Fluid]] ([http://forge.typo3.org/projects/show/package-fluid extern])
* [http://beilpuz.get-mike.de Beilpuz]
* [http://vlib.clausvb.de/ vLIB]: [http://vlib.clausvb.de/vlibtemplate.php vlibTemplate], [http://vlib.clausvb.de/vlibdate.php vlibDate] und [http://vlib.clausvb.de/vlibmimemail.php vlibMimeMail] ([http://vlib.clausvb.de/ englisch], [http://lamp.clausvb.de/ deutsch])
* [http://trac.php-tools.net/patTemplate patTemplate]
* [http://www.tinybutstrong.com/ TinyButStrong]
* [http://www.typea.net/software/contemplate/assembled/home.html Contemplate]
* [http://ets.sourceforge.net/ ETS (Easy Template System)]
* [http://www.ister.org/code/t24/index.html t24 - PHP template parser]
* [http://pear.php.net/package/HTML_Template_IT/ HTML_Template_IT: HTML Integrated Templates, PEAR-Package]
* [http://ubook.berlios.de/template/doc/default/Template.html uBook Template]
* [http://kuerbis.org/asap/article/12/ KTemplate]
* [http://php-coding-standard.de/php_template_engine.php Template Engine nur mit PHP (deutsch)]
* [http://www.sitepoint.com/article/beyond-template-engine Beyond The Template Engine (englisch)]
* [http://code.google.com/p/serpent-php-template-engine/ Serpent Template Engine]


Die Webseiten ''Template Engine nur mit PHP'' und ''Beyond The Template Engine'' zeigen die Möglichkeit HTML und PHP (weitestgehend) zu trennen, ohne eine Template Engine zu verwenden. Im Template werden nur Variablen und Blöcke ausgegeben. Die sonstige Logik wird nicht im Template programmiert.
<pre><h1><?=$body_text?></h1>

<? foreach($test_array as $key => $value): ?>
<p>Schlüssel: <?=$key?> -- Wert: <?=$value?></p>
<? endforeach; ?></pre>

Der Vorteil liegt in der einfachen Verwendung. Es muss nichts installiert werden und man braucht sich nicht in ein neues System einzuarbeiten.
Der Nachteil darin liegt allerdings darin, dass es nicht auf jedem System standardmäßig aktiviert ist. Diese Variante sollte nicht in Erwägung gezogen werden, wenn man den Code für andere Benutzer zur Verfügung stellen möchte.

Das Template-Skript von [http://www.harchut.de/download/php/php-template-engine.zip harchut.de] folgt diesem Ansatz, trennt jedoch die Variablen zwischen Steuerung und Anzeige (funktioniert ab PHP Version 3).

Die Klasse [http://phpsavant.com/ Savant] benutzt ähnlichen Code.

==== Kurzes Beispiel (Quellcode) ====

Um eine Template Engine zu verwenden, muss man zwei Dateien erstellen
* template.htm
* script.* (z.&nbsp;B. script.php, script.pl, script.asp, etc.)
die auch in verschiedenen Verzeichnissen abgespeichert werden können.

Das Template könnte so aussehen:
<pre><nowiki>
<body>

<p>{NAME}</p>

</body>
</nowiki></pre>
Und so könnte dann der PHP-Code aussehen:
<pre><nowiki>
$template->assign('NAME', 'Erika Mustermann');
</nowiki></pre>
Das Ergebnis:
<pre><nowiki>
<body>

<p>Erika Mustermann</p>

</body>
</nowiki></pre>
Nicht jede Template Engine benutzt Methoden wie „assign“. Namen wie „setvar“ oder „merge“ sind ebenso möglich. Detaillierte Beispiele kann man unter ''vlibTemplate'' und [[Smarty]] (siehe [[Template_Engine#Weblinks|Weblinks]]) ansehen.

==== Anwendungsbeispiel in Python ====

<pre><nowiki>
# -*- coding: utf-8 -*-


# Modul Template muss importiert werden

from string import Template


# Vorlage zum Lesen öffnen, Inhalt übergeben und Datei schließen

vorlage = open('vorlage.txt', 'r')
vorl_inhalt = vorlage.read()
vorlage.close()


# Den Inhalt als Template behandeln

template = Template(vorl_inhalt)


# Ersetzungen nach folgendem Schema festlegen

ersetzungen = { 'Name' : 'Hans Meier', 'Strasse' : 'Bahnhofstr. 69', 'Ort' : '12345 Foobarhausen' }


# Ersetzungen vornehmen

ersetzen = template.substitute(ersetzungen)


# Vorgang in Datei schreiben

outfile = open('ausgabe.txt', 'w')
outfile.write(ersetzen)
outfile.close()
</nowiki></pre>
vorlage.txt:
<pre><nowiki>
Name: ${Name}
Strasse: ${Strasse}
Ort: ${Ort}
</nowiki></pre>
ausgabe.txt:
<pre><nowiki>
Name: Hans Meier
Strasse: Bahnhofstr. 69
Ort: 12345 Foobarhausen
</nowiki></pre>

==== Beispiele und Tutorials (PHP) ====

* [http://lamp.clausvb.de/pte_examples/basic.php Template Engine nur mit PHP: Einfaches Beispiel]
* [http://lamp.clausvb.de/smarty_examples/basic.php Smarty: Einfaches Beispiel]
* [http://lamp.clausvb.de/vlib_examples/basic.php vlibTemplate: Einfaches Beispiel]
* [http://lamp.clausvb.de/tbs_examples/basic.php TinyButStrong: Einfaches Beispiel]
* [http://www.phpsavant.com/yawiki/index.php?area=Savant2&page=StartExample Savant: Quick example]
* [http://lamp.clausvb.de/vlib_mhtml/table_of_content.html vlibTemplate, vlibDate: Tutorial und Beispiele]
* [http://lamp.clausvb.de/smarty_mhtml/table_of_content.html Smarty: Einführung und Beispiele]
* [http://lamp.clausvb.de/tbs_mhtml/table_of_content.html TinyButStrong: Einführung und Beispiele]
* [http://www.peuss.com/PHP/Template Template-Klasse mit API-Doc und Tutorial]
* [http://manual.deihro.com/howto-3-seite-4.html?#line-code-3-5 Beispiel des Parsvorganges mit der Deihro TemplateEngine]
* [http://g-rossolini.developpez.com/comparatifs/php/templates/ Beispiele mit ModeliXe, phpBB2, Smarty, TinyButStrong und VTemplate (Französisch)]
* [http://beilpuz.get-mike.de/doku.php/bp0.2:examples Beilpuz template examples (Englisch)]
* [http://www.oliver-matuschin.de/en/Downloads/Freeware_Temply Temply: Einfacher Template-Parser für PHP, mit Beispielen]

=== Perl Template Engines ===

* [http://www.template-toolkit.org/ Template Toolkit]
* [http://www.typea.net/software/contemplate/assembled/home.html Contemplate] (auch [[ASP]])
* [http://perl.apache.org/embperl/ Embperl]
* [http://www.masonhq.com/ Mason]
* [http://html-template.sourceforge.net/ HTML Template]
* [http://perl.plover.com/Template/ Text Template]
* [http://search.cpan.org/dist/HTML-CTPP2/ HTML CTPP2]

=== Python Template Engines ===

* Cheetah
* [[SimpleTAL]]
* [[pyTemple]]
* [http://www.simple-is-better.org/template/pyratemp.html pyratemp] und [http://www.simple-is-better.org/template/ Vergleich und Benchmarks] einiger Python Template Engines
* [[Spytee]]
* [[Nevow]]
* [[Kid_(Python)|Kid]]
* [[Genshi]]
* [[Jinja (Python)|Jinja]]
* [[HTMLTemplate]]

Es gibt sehr viele Templating Engines unter [[Python (Programmiersprache)|Python]], auch größere Systeme, die über deren Fähigkeiten weit hinausgehen. Beispiele sind ''[[Django_(Framework)|Django]]'' oder ''TurboGears''. Eine gute Übersicht (mit URI und Code-Beispielen) findet man im [http://pythonwiki.pocoo.org/Template_Engines deutschen PythonWiki]. Eine umfangreichere Liste, dafür weniger erklärt findet man im [http://wiki.python.org/moin/WebProgramming englischen Wiki zu Python].

=== C/C++Template Engines ===

* [http://www.clearsilver.net/ ClearSilver] Die Template Engine von Orkut und Yahoo Groups (setzen einen eigenen Branch ein).
* [http://www.grantlee.org/ Grantlee Template System]

=== Sonstiges ===

* [[Hamlets]] – Java-basierte Template Engine
* [[Apache Velocity]] – Java-basierte Template Engine
* [[Freemarker]] – Java-basierte Template Engine ([http://freemarker.org/ Freemarker website])
* [[XSLTengine]] - Java-basierte Template Engine, insbesondere für Web-Entwickler ([http://www.java4web.com/xslt?xsltengine XSLTengine website])
* [[openArchitectureWare|Xpand]] – Java-basierte Template Engine für die Codegenerierung ([http://www.openarchitectureware.org oAW website])
* ASP: [http://www.typea.net/software/contemplate/assembled/home.html Contemplate (englisch)]
* [http://ctpp.havoc.ru/en/ CTPP, Crossplatform C/C++/PERL and PHP Template engine]
* [http://www.gvtags.org GvTags Template engine für Groovy]
* [http://aefxx.com/jquery-plugins/jqote2/ jQote2 - jQuery Javascript Templating Engine]
* [http://www.somebytes.net/54-0-FilesFromCSV.html FilesFromCSV - .NET basiert - erzeugt pro CSV Datensatz ein Dokument]

== Literatur ==

* Karsten Wendland: ''Der Template-Zyklus. Web-Templates im Spannungsfeld von schöpferischem Gestalten und einschränkender Zumutung'', Aachen: 2006, ISBN 3-83225-285-1

[[Kategorie:Templatesprache]]
[[Kategorie:Software]]

[[en:Template engine (web)]]
[[pl:System szablonów]]
[[ru:Шаблонизатор]]

Version vom 26. November 2010, 13:27 Uhr

Eine Template Engine (von engl. Vorlage und Maschine) ist eine Software, die eine Datei (das Template) verarbeitet, und bestimmte Platzhalter darin mit jeweils aktuellen Inhalten füllt. Die Bezeichnungen Templateklasse und Templatesystem werden oft als Synonym für eine Template Engine verwendet.

Klassentemplates in der C++-Programmierung sind dagegen nicht mit Template Engines vergleichbar, weil sie eine vom Datentyp unabhängige Programmierung ermöglichen und ganze Klassen enthalten.

In den Templates einer Template Engine sollte kein Programm-Code enthalten sein. Kontrollstrukturen (wie IF) sind allerdings oft in Templates möglich und verbreitet.

Typische Dateitypen, die verarbeitet werden, sind HTML, Text (ASCII oder Unicode), XML oder TeX.

Konzept

Das Konzept ähnelt den Seriendruckfeldern bei einer Textverarbeitung: In einem Dokument werden Seriendruckfelder (Platzhalter) eingefügt, etwa Name – Straße – Ort. Bei Template Engines werden diese Seriendruckfelder Templatevariablen genannt. Wenn aus dem Dokument dann mehrere Serienbriefe erzeugt werden, steht anstatt der Templatevariablen name ein realer Name wie „Erika Mustermann“ im fertigen Serienbrief.

Das Dokument muss nur einmal geschrieben und formatiert werden. Alle Änderungen wirken sich automatisch auf zukünftig erstellte Serienbriefe aus. Das ist bei Template Engines genauso; weitere Parallelen zu Serienbrief-Vorlagen sind:

  • Die Daten kommen aus einer externen Quelle (Datenbank, Tabellenkalkulation, etc.).
  • Um die Daten zu ändern, muss das Template nicht verändert werden, und umgekehrt.
  • Das Template kann wiederverwendet werden.

Abgrenzung

Template Engines werden häufig von Programmierern eingesetzt, um im Kontext von Web-Applikationen Programm-Code (einer Programmiersprache) vom Design zu trennen. Genauso wird von den Herstellern mancher Template Engines angeführt, Templates und Engines sollen durch die Trennung der Programmierlogik vom Design das Skript von HTML-Code befreien und damit übersichtlicher machen.

Demgegenüber steht der ursprüngliche Gedanke der Template Engines: Sie sollen statischen Text und dynamische Inhalte möglichst effizient miteinander verknüpfen. Oft sind Template Engines deshalb gerade in Programmiersprachen anzutreffen, deren Syntax eine solche Mischung nicht direkt unterstützt (z. B. Java: JSP; VBScript u. a.: ASP).

Für eine echte Trennung der Darstellung von den Datenmodellen und den Logikkomponenten sind Template Engines dagegen ungeeignet und es sind zusätzliche Konzepte wie z. B. Model View Controller notwendig.

Vorteile

  • Programm-Code (PHP, Python, Perl, etc.) wird vom Markup (HTML) getrennt
  • Designer und Programmierer können gleichzeitig an einem Projekt arbeiten
  • WYSIWYG-Editoren können verwendet werden

Nachteile

Template Engines

  • erzeugen immer zusätzlichen Overhead.
  • müssen im Gebrauch erlernt werden. Oft sind grundlegende Kenntnisse der objektorientierten Programmierung Voraussetzung.
  • sind auf eine textuelle Ausgabe beschränkt.

Sprachunabhängige Template-Engines

TAL/ZPT

Für den Web-Anwendungsserver Zope wurden die Zope Page Templates zunächst in Python entwickelt, die jedoch von Anfang an sprachunabhängig ausgelegt waren. Diese verwenden die folgenden Technologien:

Template Attribute Language (TAL)
verwendet spezielle Attribute (daher Template Attribute Language, in etwa: Attributbasierte Schablonensprache) mit dem Präfix tal:, um Elemente zu füllen oder zu ersetzen, Schleifen zu realisieren oder Bedingungen zu überprüfen. (Stets sprachspezifischer) Programmcode in Verarbeitungsanweisungen, außerhalb der üblichen Elemente, ist nicht nötig (Beispiel)
TAL Expression Syntax (TALES)
die einzige Komponente, die programmiersprachabhängige Inhalte erlaubt (nicht aber erfordert); beschreibt die Syntax der Attributwerte: eine Python-Implementierung wird sehr wahrscheinlich (aber nicht notwendigerweise) Python-Ausdrücke erlauben. Für die allermeisten Anwendungen reicht es, sprachunabhängige Pfadausdrücke zu verwenden (Beispiele)
Macro Expansion TAL (METAL)
Erlaubt die Wiederverwendung von Code in anderen Templates; ebenfalls eine Template Attribute Language, Präfix: metal:
i18n TAL
Mittels des i18n-Namensraums (also des Attribut-Präfix i18n:) und GNU gettext lassen sich sprachabhängige Ausgaben erzeugen.

Es können HTML-Dokumente und XML aller Spielarten incl. XHTML generiert werden; bei korrekter Deklarierung der Namensräume sind die XML-Templates validierbar und lassen sich mit allen modernen Designwerkzeugen bearbeiten. Auch bei HTML-Templates wird Wohlgeformtheit (gemäß den HTML-Regeln) garantiert; andernfalls würden sie sich nicht übersetzen lassen. Templates können leicht mit echt aussehenden Dummy-Inhalten ausgestattet werden, um dem Designer einen realistischen Eindruck zu geben; dieser darf sogar eigene Dummydaten hinzufügen, die vom Programmierer dann auf einfache Weise ausgeblendet werden können.

Es existieren Implementierungen für Python, Java, Perl, PHP und XSL (Transformation von TAL in ein XSLT-Template); eine (möglicherweise unvollständige) Liste findet sich hier.

XSL/XSLT

Diese Version ist leistungsstark und überaus komplex.

XSL
Extensible Stylesheet Language
XSLT
XSL Transformation, eine turing-vollständige Programmiersprache zur Transformation von XML-Dokumenten

Sprachabhängige Template-Engines

Die Masse von Template Engines ist enorm. Eigenentwicklungen sind an der Tagesordnung. XSLT ist für alle Template Engines eine Konkurrenz. Bei PHP ist Smarty weit verbreitet, hat aber die Eigenentwicklungen und andere Template Engines nicht vom Markt verdrängt.

PHP Template Engines

PHP selbst ist bereits so entworfen, dass man programmiersprachliche Konstrukte mit der textuellen Ausgabe über Platzhalter bzw. gekennzeichnete Bereiche mischen kann. Die Verwendung einer gesonderten Template Engine für PHP ist deswegen eigentlich nicht erforderlich. Dennoch existieren gerade für PHP eine sehr große Zahl von Engines:


Die Webseiten Template Engine nur mit PHP und Beyond The Template Engine zeigen die Möglichkeit HTML und PHP (weitestgehend) zu trennen, ohne eine Template Engine zu verwenden. Im Template werden nur Variablen und Blöcke ausgegeben. Die sonstige Logik wird nicht im Template programmiert.

<h1><?=$body_text?></h1>

<? foreach($test_array as $key => $value): ?>
<p>Schlüssel: <?=$key?> -- Wert: <?=$value?></p>
<? endforeach; ?>

Der Vorteil liegt in der einfachen Verwendung. Es muss nichts installiert werden und man braucht sich nicht in ein neues System einzuarbeiten. Der Nachteil darin liegt allerdings darin, dass es nicht auf jedem System standardmäßig aktiviert ist. Diese Variante sollte nicht in Erwägung gezogen werden, wenn man den Code für andere Benutzer zur Verfügung stellen möchte.

Das Template-Skript von harchut.de folgt diesem Ansatz, trennt jedoch die Variablen zwischen Steuerung und Anzeige (funktioniert ab PHP Version 3).

Die Klasse Savant benutzt ähnlichen Code.

Kurzes Beispiel (Quellcode)

Um eine Template Engine zu verwenden, muss man zwei Dateien erstellen

  • template.htm
  • script.* (z. B. script.php, script.pl, script.asp, etc.)

die auch in verschiedenen Verzeichnissen abgespeichert werden können.

Das Template könnte so aussehen:

<body>

<p>{NAME}</p>

</body>

Und so könnte dann der PHP-Code aussehen:

$template->assign('NAME', 'Erika Mustermann');

Das Ergebnis:

<body>

<p>Erika Mustermann</p>

</body>

Nicht jede Template Engine benutzt Methoden wie „assign“. Namen wie „setvar“ oder „merge“ sind ebenso möglich. Detaillierte Beispiele kann man unter vlibTemplate und Smarty (siehe Weblinks) ansehen.

Anwendungsbeispiel in Python

# -*- coding: utf-8 -*-


# Modul Template muss importiert werden

from string import Template


# Vorlage zum Lesen öffnen, Inhalt übergeben und Datei schließen

vorlage = open('vorlage.txt', 'r')
vorl_inhalt = vorlage.read()
vorlage.close()


# Den Inhalt als Template behandeln

template = Template(vorl_inhalt)


# Ersetzungen nach folgendem Schema festlegen

ersetzungen = { 'Name' : 'Hans Meier', 'Strasse' : 'Bahnhofstr. 69', 'Ort' : '12345 Foobarhausen' }


# Ersetzungen vornehmen

ersetzen = template.substitute(ersetzungen)


# Vorgang in Datei schreiben

outfile = open('ausgabe.txt', 'w')
outfile.write(ersetzen)
outfile.close()

vorlage.txt:

Name: ${Name}
Strasse: ${Strasse}
Ort: ${Ort}

ausgabe.txt:

Name: Hans Meier
Strasse: Bahnhofstr. 69
Ort: 12345 Foobarhausen

Beispiele und Tutorials (PHP)

Perl Template Engines

Python Template Engines

Es gibt sehr viele Templating Engines unter Python, auch größere Systeme, die über deren Fähigkeiten weit hinausgehen. Beispiele sind Django oder TurboGears. Eine gute Übersicht (mit URI und Code-Beispielen) findet man im deutschen PythonWiki. Eine umfangreichere Liste, dafür weniger erklärt findet man im englischen Wiki zu Python.

C/C++Template Engines

Sonstiges

Literatur

  • Karsten Wendland: Der Template-Zyklus. Web-Templates im Spannungsfeld von schöpferischem Gestalten und einschränkender Zumutung, Aachen: 2006, ISBN 3-83225-285-1