PHP Template System - FastTemplateIn diesem Artikel lernen Sie das PHP Template System "FastTemplate", mit den Techniken, und den Möglichkeiten, sowie der Anwendung kennen.

Es gibt verschiedene Arten von Template Systemen in PHP. FastTemplate ist ein Template System, welches blockartig aufgebaut ist. D.h. der Designer kann einzelne Blöcke oder Bereiche einer Seite designen, das System kombiniert diese Blöcke dann entsprechend mit den aufzufüllenden Daten. FastTemplate ist eine PHP Klasse, die von http://www.thewebmasters.net/php/ heruntergeladen werden kann. Diese Klasse muss in das PHP Programm eingebunden, und ein Objekt davon abgeleitet werden.

template.tpl


<html><head>
<title>{title}</title>
</head>
<body>
<h1>{title}</h1>
<p><b>{teaser}</b></p>
<p>{inhalt}</p>
</body>
</html>


Die Platzhalter bei diesem Template sind in geschweiften Klammern. Dadurch werden Sie eindeutig. Man kann die Platzhalter auch anders gestalten, sodass es zu keinen Konflikten zwischen den {} der Platzhalter, und z.B. den {} Klammern eines JavaScripts kommt. Die Platzhalter könnten z.B. auch wie folgt aussehen {(title)}. Wie Platzhalter aussehen ist also egal, die Platzhalter müssen nur als solche an die FastTemplate Klasse übergeben werden, da FastTemplate ja sonst die Platzhalter nicht "entdecken" könnte, und dadurch nichts ersetzen würde.

Nun aber zurück zu unserem Beispiel. Wir möchten, dass die einzelnen Platzhalter des Templates durch die entsprechenden Inhalte ersetzt werden.

1. Zunächst muss, wie bereits erläutert die Klasse "class.FastTemplate.php" in das Skript eingebunden werden.

<?php
include "class.FastTemplate.php3";


2. Daraufhin muss von dieser Klasse ein Objekt erzeugt werden. Über dieses Objekt wird mit der Klasse "kommuniziert", und die einzelnen Methoden aufgerufen, und die Ergebnisse empfangen.

$tpl = new FastTemplate(".");

Die Pfadangabe in der Klammer (der Punkt) verweist auf den Ordner, aus dem die verschiedenen HTML Templates geladen werden. Der Punkt steht hierbei für das aktuelle Verzeichnis.

3. Jetzt wird das Template, bzw. die Templates, die verwendet werden, definiert. Dabei wird die define() Methode von FastTemplate verwendet.
$tpl->define(array(
"template" => "template.tpl"
));

Es wird ein assoziatives Array erzeugt. Dabei ist der Index, hier im Beispiel "template", der Name des Templates. Über diesen Namen wird das Template im weiteren angesprochen.
Wie Sie sehen können Sie mehrere Templates definieren, und diese auch gleichzeitig nutzen. So ist es möglich über mehrere Templates eine Seite in einzelnen Blöcken aufzubauen.

4. Im nächsten Schritt werden die verschiedenen Platzhalter definiert, und angegeben, mit welchen Werten diese gefüllt werden sollen. Es wird hierzu die assign() - Methode von FastTemplate verwendet.

$tpl->assign("{title}", "Der Titel");
$tpl->assign("{teaser}", "Der Teaser");
$tpl->assign("{inhalt}", "Der Inhalt");

Es ist klar, das die Anwendung so kaum Sinn macht, da man hierbei die Inhalte innerhalb der PHP Funktion definieren müsste.
Ein Verweis auf eine Variable, mit dem Inhalt macht mehr Sinn. Dieser Inhalt kann zuvor z.B. aus einer Datenbank, oder einer Textdatei ausgelesen worden sein. Die Defintion des Inhalts könnte also auch wie folgt aussehen:
$tpl->assign("{title}", $title);
Mit diesem Schritt kennt FastTemplate die einzelnen Platzhalter, und weiß, mit welchen Werten diese zu ersetzen sind.

5. Nun kann eigentlich der letzte Schritt in Angriff genommen werden. Es muss nur noch der Inhalt mit dem Template kombiniert werden. Dies muss auch explizit angewiesen werden.
$tpl->parse("ausgabe", "template");
$tpl->FastPrint("ausgabe");
?>

Es wird die FastTemplate Funktion parse() aufgerufen. An diese Funktion werden zwei Parameter übergeben. Der erste Parameter ist ein Name. Über diesen Namen wird der Output, also das Ergebnis aus dem Parsen des Templates und des Inhaltes zugegriffen. Er ist notwendig, da man über ihn z.B. die Ausgabefunktion in der nächsten Zeile aufrufen muss. Dadurch wird sichergestellt, dass das Ergebnis ein einzelner Block ist, der noch weiter bearbeitet kann.
Der zweite Parameter verweist auf das Template. Hierbei wird der Name des Templates verwendet, welcher im Schritt 3 definiert wurde.
Das Ergebnis wird nun in der letzten Zeile ausgegeben.

Das komplette PHP Skript:

<?php
include "class.FastTemplate.php3";
$tpl = new FastTemplate(".");
$tpl->define(array(
"template" => "template.tpl"
));

$tpl->assign("{title}", "Der Titel");
$tpl->assign("{teaser}", "Der Teaser");
$tpl->assign("{inhalt}", "Der Inhalt");
$tpl->parse("ausgabe", "template");
$tpl->FastPrint("ausgabe");
?>


Nützliche Anwendung von FastTemplate

Dieses Beispiel hat ja noch kaum die Stärke von FastTemplate gezeigt. Das folgende Beispiel hat die Aufgabe, einzelne Artikel mit einer ID aus einer Datenbank zu laden, und die Werte den Platzhaltern zuzuweisen. Das Ergebnis ist folglich ein kleines CMS. Die Daten der Artikel werden in der Datenbank gespeichert, über die ID des Artikels im URL werden diese über das Skript geladen, und schlussendlich über FastTemplate mit dem Template kombiniert, und ausgegeben.

Die Datenbank-Tabelle "article" wird über folgendes SQL Statement erzeugt.

CREATE TABLE article (id INT not null AUTO_INCREMENT, title VARCHAR (30) not null , teaser VARCHAR (250) not null , inhalt TEXT not null , PRIMARY KEY (id))

In ihr wird die ID des Artikels, der Titel, der Teaser, sowie der Inhalt selbst gespeichert.

Nun das PHP Programm, das auf diese Daten in der Datenbank zurückgreift, und über FastTemplate ausgibt.
Es wird das gleiche Template wie oben verwendet, nur das die Datenbank-Funktionen hinzugefügt worden sind.

show_article.php


<?php
// FastTemplate Klasse wird geladen
include "class.FastTemplate.php3";

//Variablen für die Datenbankverbindung
$user = "";
$pass = "";
$host = "localhost";
$db = "cms";

//Verbindung wird aufgebaut
$connid = mysql_connect($host, $user, $pass);

//Template Objekt wird erzeugt, Templates definiert
$tpl = new FastTemplate(".");
$tpl->define(array(
"template" => "template.tpl"
));

//wenn die $ID in dem URL vorhanden ist...
if (isset($ID)) {

//Daten werden aus der Datenbank geladen
$sql = "Select*From article where id='$ID'";
if (!$erg = mysql_db_query($db, $sql, $connid)) {
echo "Artikel nicht in DB vorhanden!<br>"; }
else {
$erg2 = mysql_fetch_array($erg, MYSQL_ASSOC);

//Daten und Platzhalter werden definiert
$tpl->assign("{title}", $erg2["title"]);
$tpl->assign("{teaser}", $erg2["teaser"]);
$tpl->assign("{inhalt}", $erg2["inhalt"]);

//Parsing-Schritt
$tpl->parse("ausgabe", "template");
$tpl->FastPrint("ausgabe");
}
}
echo "Sie haben keinen Artikel ausgewählt!<br>";
mysql_close($connid);
?>


Nun, die Erklärung der Arbeitsweise ist eigentlich leicht zu erkennen.
In der ersten Zeile wird wiederum die FastTemplate Klasse eingebunden. In den folgenden Zeilen werden die Daten für die MySQL Verbindung angegeben.
Daraufhin wird die Verbindung zur MySQL Datenbank aufgebaut.
Daraufhin wird von der Template Klasse ein Objekt erzeugt, und das Template definiert.
Dem Aufruf des PHP Skripts "show_article.php", wird als Parameter eine ID gegeben (z.B. show_article.php?ID=1). Über diese ID wird der Artikel aus der Datenbank gelesen. Ist diese ID nicht im URL vorhanden, oder kann über diese ID kein Artikel aus der Datenbank gelesen werden, dann wird das Programm vorzeitig beendet.
Das SQL Statement, welches den Artikel aus der Datenbank ließt wird dynamisch generiert, da die ID ja vom URL abhängig ist, macht dies ja auch nur Sinn.
$sql = "Select*From article where id='$ID'";
Daraufhin wird der Query an die Datenbank gesendet. Wird kein Ergebnis zurückgegeben, wird das die Fehlermeldung "Artikel nicht in DB vorhanden!" ausgegen. Ansonsten wird aus den Ergebnissen über die mysql_fetch_array() Funktion ein Array erzeugt. Die Konstante "MYSQL_ASSOC" besagt, dass es sich bei dem Array um ein assoziatives Array handelt, dessen Index der Name der MySQL Tabellenspalte ist.
$erg2 = mysql_fetch_array($erg, MYSQL_ASSOC);
//Daten und Platzhalter werden definiert
$tpl->assign("{title}", $erg2["title"]);
$tpl->assign("{teaser}", $erg2["teaser"]);
$tpl->assign("{inhalt}", $erg2["inhalt"]);

Ist dies geschafft, so ist der größte Teil der Arbeit schon gemacht worden. Jetzt werden die Werte in dem Array noch den passenden Platzhaltern zugewiesen, FastTemplate parsed das Template, und gibt das Ergebnis aus.
$tpl->parse("ausgabe", "template");
$tpl->FastPrint("ausgabe");


Volià - Ein kleines System zum Laden von Artikeln aus der Datenbank, und das Anzeigen über das Template System FastTemplate ist fertig.

Das Programm gibt es auch zum downloaden und Testen. (tf)

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Keine weiterführenden Beiträge.