Benjamin Dietz
 
  Home
  Lebenslauf
  Studium
  Zeugnisse
  Qualifikationen
  Publikationen
  Projekte
  PHP Stuff
  Kontakt
  Impressum
   

PHP Stuff -
MyTemplate System

Anlässlich der Entwicklung eines CMS habe ich mich mit der Trennung von Funktion und Layout beschäftigt. Ich habe mir einige Template Klassen für PHP angesehen und anschließend eine eigene Template Klasse "MyTemplate" entwickelt.

Download: MyTemplate-System

Die Template Klasse ist in etwa mit Klassen wie Integrated Template oder der Template Klasse aus der PHPlib vergleichbar, jedoch mit einigen speziellen Features, bei gleicher einfachen Bedienung.


Features

  • Beliebig Verschachtelbahre Blöcke
  • Odd/Even Blöcke
  • Bedingungen - IF-Blöcke
  • Erweiterbarkeit durch selbst definierte Funktionen

Technik

In der Klasse kommen Perl kompatible Reguläre Ausdrücke "preg_*PHP-Funktionen*" zum Einsatz. Bei der einfache Variablen - Ersetzung wird preg_replace, welches mittels Arrays seine Dienste tut, benutzt.


Einfache Platzhalter.

In dem Template können einfache Platzhalter gesetzt werden, welche beim Parsen den Templates durch entsprechende PHP-Variablen ersetzt werden.

Beispiel-Schablone:
...
Guten Tag ich heise {:name:}.
...

Im PHP-Script werden Variablen mittels der Methode
assign_var (string Name, string Value) gesetzt.


Erweiterte Funktionen:

Funktionen können in PHP definiert werden und der Template Klasse bekannt gemacht werden. Der Funktionsplatzhalter wird durch den Rückgabewert der Funktion ersetzt.

Beispiel-Schablone:

...
{:getNav: type="main":}
...

Erweiterte Funktionen werden in PHP einfach deklariert und anschließend dem Template-System bekannt gemacht, mittels der Methode
assign_func(string tpl_FunktionName, string PHP_FunktionName)


Blöcke

Blöcke können verwendet werden, um zu Wiederholende Inhalte auszulisten. Dies kann z.B. verwendet werden, um Artikel in einem Online-Shop auszulisten. Bei dieser Seite wurden Blöcke für die Navigationsleiste verwendet.
Die Blöcke können beliebig verschachtelt werden.

Beispiel-Schablone:
...
<tpl:BLOCK : Block 1 >
   Der zu wiederholende Inhalt {:var:}.
<tpl: /BLOCK : Block 1 >
...

Block Variablen werden in PHP mittels der Methode
assign_var (string BlockName, string Name, string Value) gesetzt.

Eine Blockwiederholung entsteht, wenn nach setzen von Block-Variablen die Methode set_block(string blockName) aufgerufen wird.

Verschachtelte Blöcke werden automatisch erkannt, je nach dem wie die Blockwiederholungen gesetzt werden.

Beispiel:
...
assign_var ("Block1", "Kategorie", "KFZ");
       assign_var ("Block2", "name", "Auto");
       assign_var ("Block2", "name", "Motorrad");
       assign_var ("Block2", "name", "Moped");
       set_block ("Block2");
set_block ("Block1");

assign_var ("Block1", "Kategorie", "KFZ-2");
       assign_var ("Block2", "name", "Auto-2");
       assign_var ("Block2", "name", "Motorrad-2");
       assign_var ("Block2", "name", "Moped-2");
       set_block ("Block2");
set_block ("Block1");
...


Bedingungen

Bedingungen können verwendet werden, um einen Inhalt nur bei einem bestimmten Wert einer gesetzten Variable anzuzeigen, bzw. beim vorhandensein einer Variable.

Beispiel-Schablone:
...
<tpl: IF: name (name = "Maier") >
   Guten Tag Herr {:name:}.
<tpl: /IF: name>

<tpl: IF: name (error) >
   Ups ein Fehler .
<tpl: /IF: name>

<tpl: IF: name (!error) >
   Alles OK .
<tpl: /IF: name>

<tpl: IF: name (wert >= "5" ) >
  Wert ist >= 5 .
<tpl: /IF: name>
...

Bei Bedingungen ist es möglich eine Kurzform zu verwenden.
Hierzu kann als name auch gleich die Bedingung gesetzt werden.
Allerdings ist dies nur bei Existenzprüfung einer Variable zu empfehlen, weil die schreibweise der Bedingung so im öffnenden und Schließenden Tag identisch sein muss.

Beispiel-Schablone:
...
<tpl: IF: error>
   Ups ein Fehler .
<tpl: /IF: error>

<tpl: IF: !error>
   Alles OK .
<tpl: /IF: !error>
...


Odd/Even Blöcke

Mit ODD/EVEN Blöcke können abwechselnde Blöcke realisiert werden, beispielsweise in der Ausrichtung Abwechselnde Tabellenzeilen.

Beispiel-Schablone:
...
<table>
<tpl: BLOCK : Block 1 >
<tr>
<tpl:ODD: odd1 >
<td align="left" bgcolor="#CCCCCC">
Der zu wiederholende Inhalt {:var:}
</td>
<tpl:/ODD: odd1 >

<tpl:EVEN: even1 >
<td align="right">Der zu wiederholende Inhalt {:var:}</td>
<tpl:/EVEN: even1 >
</tr>

<tpl:/BLOCK : Block 1 >
</table>
...


Odd/Even Wertzuweisung:

In Blöcken können auch einfache Werte für ODD/EVEN zugewiesen werden. Der momentane Wert wird dann in dem Platzhalter in der Schablone eingesetzt.

So kann z.B. eine Tabelle mit unterschiedlichen Hintergrund Farben für jede Zeile Realisiert werden.

Beispiel-Schablone:
...
<table>
<tpl:BLOCK : Block 1 >
<tpl: ODD="#FFFFFF" EVEN="#000000">
<tr>
<td align="left" bgcolor="">
Der zu wiederholende Inhalt {:var:}
</td>
</tr>
<tpl:/BLOCK : Block 1 >
</table>
...


Allgemeine Template-Syntax

  • Platzhalter:
    {:name:}
  • Funktionen:
    {:Funktiondsname: [<Parameter>] ="[<Wert>] " :}
  • Bedingungen:
    <tpl:IF: [<Name>] ( [<Bedingung>] )>...<tpl:/IF: [<Name>] >

Platzhalter, Funktionen und Bedingungen könne überall im Template verwendet werden.

  • Blöcke:
    <tpl:BLOCK: [<Name>] >...<tpl:/BLOCK: [<Name>] >
  • Odd/Even Blöcke:
    <tpl:ODD: [<Name>] >...<tpl:/ODD: [<Name>] >
    <tpl:EVEN: [<Name>] >...<tpl:/EVEN: [<Name>] >
  • ODD/Even Wertzuweisung :
    <tpl: ODD="Wert" EVEN="Wert">

ODD/Even Blöcke, Odd/Even Wertzuweisungen, sowie die Nachfolgenden Spezial Variablen können nur in Blöcken verwendet werden, bzw. sind nur dort verfügbar.

  • Aktueller Schleifenzähler (Beginnt bei 1) :
    { :_LOOP_: }
  • Gestammte Wiederholungen der Schleife:
    { :_MAX_LOOP_: }
  • Zugewiesener ODD/EVEN Wert :
    { :_ODDEVEN_: }

PHP Methoden

  • Template_System (string root)
    root = (Standart =".")

  • assign_var ()
    • Für Block-Variablen:
      assign_var (string BlockName, string Name, string Value)
      Oder
      assign_var (string BlockName, array Name/Value)
    • Normale Variablen:
      assign_var (string Name, string Value)
      Oder
      assign_var (array Name/Value)
  • assign_func(string tpl_FunktionName, string PHP_FunktionName)

  • set_block(string blockName)

  • parse(string unknows)
    unknows = remove(Standart), keep oder comment

  • set_tpl_file(string fileName)

 
Valid HTML 4.01!