Templatesystem

Templatesystem

Eine Template Engine (von engl. Vorlage und Antrieb, Motor) 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.

Inhaltsverzeichnis

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

Kann alles, ist aber ü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.

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

Wikimedia Foundation.

Игры ⚽ Поможем написать курсовую

Schlagen Sie auch in anderen Wörterbüchern nach:

  • 3D GameStudio — Entwickler Conitec Aktuelle Version 8.20.1 (20. April 2011) Betriebssystem Windows Kategorie Computerspiel Entwicklungssystem Lizenz …   Deutsch Wikipedia

  • 3D Game Studio — 3D GameStudio Entwickler: Conitec Aktuelle Version: 7.70 (Januar 2008) Betriebssystem: Windows Kategorie: Computerspiel Entwicklungssystem Lizen …   Deutsch Wikipedia

  • 3D Gamestudio — Entwickler: Conitec Aktuelle Version: 7.70 (Januar 2008) Betriebssystem: Windows Kategorie: Computerspiel Entwicklungssystem Lizen …   Deutsch Wikipedia

  • WoltLab Burning Board — WoltLab Burning Board …   Deutsch Wikipedia

  • 4images — Entwickler 4Homepages Aktuelle Version 1.7.10 (1. Mai 2011) Betriebssystem plattformunabhängig Programmier­sprache PHP Kategor …   Deutsch Wikipedia

  • Burning Board — WoltLab Burning Board (WBB) Entwickler: WoltLab GmbH Aktuelle Version: 3.0.8pl1 (19. September 2008) Betriebssystem: plattformunabhängig Programmiersprache …   Deutsch Wikipedia

  • Groovy — Basisdaten Paradigmen: objektorientiert, Skriptsprache, teilweise deklarativ Erscheinungsjahr …   Deutsch Wikipedia

  • Simple Machine Forum — Simple Machines Forum Simple Machines Forum mit Standardtheme Basisdaten …   Deutsch Wikipedia

  • Simple Machines — Forum Simple Machines Forum mit Standardtheme Basisdaten …   Deutsch Wikipedia

  • Simple Machines Forum — mit Standardtheme Basisdaten …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”