Welche Template-Engines für HTML und anderes gibt es?

Inhalt:

Kurze Einführung

Es gibt verschiedene Template-Systeme für verschiedene Zwecke. Es gibt nicht das beste System. In ihrer Komplexität sind die Systeme sehr verschieden, und manchmal scheiden sich die Geister, wie komplex so etwas sein darf. Puristen bevorzugen z.B. etwas wie HTML::Template, das keine wirkliche Programmierung erlaubt, sondern nur einfach Kontrollstrukturen wie TMPL_IF, TMPL_LOOP etc. hat. Das schränkt ein, verhilft aber auch zu einem sauberen Design. Systeme wie TT2 erlauben Perl-Code im Template; somit sind der Kreativität keine Grenzen gesetzt, jedoch muss man aufpassen, wenn der Template-Code für Webentwickler bestimmt ist, die sich nicht mit Perl-Statements herumschlagen wollen.

Einen Vergleich verschiedener Template-Systeme findet man hier: http://perl.apache.org/docs/tutorials/tmpl/comparison/comparison.html


HTML::Template

Caching

Erlaubt das Cachen von Template-Dateien, die jedoch beim Ausfüllen immer wieder geparsed werden. Somit spart man das Einlesen der Dateien, nicht aber das Parsen.

Link zu Einführung HTML::Template

Auf dem "Freaktreffen 2004" hat ReneeBaecker eine Einführung in HTML::Template gehalten. PDFs sind zu finden unter http://perl.renee-baecker.de/HTML_Template.pdf (Skript) und http://perl.renee-baecker.de/HTML_TemplateII.pdf

Beispiel

<TMPL_VAR name="Vorname" ESCAPE=HTML>
<TMPL_IF visa>Ausgewählt: Visa-Card
<TMPL_ELSE>Was anderes ausgewählt
</TMPL_IF visa>
<TMPL_LOOP artikel>
  <TMPL_VAR artnr>:<TMPL_VAR artikel ESCAPE=HTML>
</TMPL_LOOP>


HTML::Template::Compiled

  • hat ein paar Features mehr als HTML::Template
  • ist weitgehend (aber nicht völlig) kompatibel
  • ist 3-7 mal schneller, je nachdem, welche Tags und Optionen man benutzt (allerdings nur unter mod_perl, als CGI-Skript ist es kaum schneller)
  • Download: http://search.cpan.org/dist/HTML-Template-Compiled/


Text::Template


Template Toolkit (in der Version 2.x bekannt als TT2)

Erhältlich auf CPAN.

Caching

Erlaubt Caching in Form von Code...?


Mason, HTML::Mason

Mason, auch HTML-Mason genannt, erlaubt die Einbettung von Perl-Code in HTML und erleichtert somit das Arbeiten mit dynamischen Webseiten. Mason ist sowohl als reines Perl-Skript als auch als CGI mit/ohne mod_perl lauffähig. Die Benutzung von mod_perl beschleunigt jedoch die Ausführung des Codes um bis das 10- bis 20fache!


Text::Micromason

Eine Textengine, die von HTML-Mason abgeleitet wurde und die Fähigkeit besitzt, Perl und Text jeder Art miteinander zu vereinen. Es ist möglich, die Tags für integrierten Code in verschiedener Art aus zu zeichnen, nämlich als ASP, JSP, EmbPerl?, HTML-Template und Mason-Syntax.

Einige Beispiele:

Mason-Syntax

<%args>
  $name
</%args>

% if ( $name eq 'Dave' ) {
    I'm sorry <% $name %>, I'm afraid I can't do that right now.
% } else {
<%perl>
  my $hour = (localtime)[2];
  my $daypart = ( $hour > 11 ) ? 'afternoon' : 'morning'; 
</%perl>
    Good <% $daypart %>, <% $name %>!
% }
<& "includes/standard_footer.msn" &>

<%doc>
    Here's a private developr comment describing this template. 
</%doc>

Server Pages-Syntax

<% my $name = $ARGS{name};
   if ( $name eq 'Dave' ) {  %>
        I'm sorry <%= $name %>, I'm afraid I can't do that right now.
    <% } else { 
       my $hour = (localtime)[2];
       my $daypart = ( $hour > 11 ) ? 'afternoon' : 'morning'; 
      %>
        Good <%= $daypart %>, <%= $name %>!
    <% } %>

EmbPerl?-Syntax

[- my $name = $ARGS{name}; -]
[$ if $name eq 'Dave' $]
       I'm sorry [+ $name +], I'm afraid I can't do that right now.
[$ else $]
[- 
   my $hour = (localtime)[2];
   my $daypart = ( $hour > 11 ) ? 'afternoon' : 'morning'; 
-]
       Good [+ $daypart +], [+ $name +]!
[$ endif $]

HTML::Template-Syntax

<TMPL_IF NAME="user_is_dave">
   I'm sorry <TMPL_VAR NAME="name">, I'm afraid I can't do that right now.
<TMPL_ELSE>
   <TMPL_IF daytime_is_morning>
       Good morning, <tmpl_var name>!
   <TMPL_ELSE>
       Good afternoon, <TMPL_VAR NAME="name">!
   </TMPL_IF>
</TMPL_IF>

HTML::Template::Compiled-Syntax

Beispiel folgt noch


-- TinaMueller, GwenDragon, ReneeBaecker - 15 Apr 2005

UtilFaqSubForm edit

Titel Welche Template-Engines gibt es?
Autor TinaMueller
Bereich FaqStrings
Topic revision: 2006-05-06, TinaMueller
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um Rückmeldung.