Templates in PHP

Ein kleines Tutorial zum Einsatz von Templates in PHP am Beispiel der Apolda Templateklasse (kuerbis.org/template/)

Beispieltemplates zum DOWNLOAD!

Templates in PHP am Beispiel der Aploda Template Klasse

Der Einsatzt von Templates ermöglicht eine Trennung zwischen Programmlogik und HTML-Layout. PHP-Code und HTML-Code werden dabei in verschiedenen Dateien gespeichert. In diesem Tutorial wird die Apolda-Template Klasse von Ralf Geschke verwendet (http://kuerbis.org/template/).

Erstes Beispiel
Zum einen haben wir eine HTML-Datei, die an einigen Stellen Platzhalter der Form enthält.

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
Heute ist der <BR>
</BODY>
</HTML>

In diesem Beispiel und , die später durch den Titel der Seite und das aktuelle Datum ersetzt werden sollen. Auf der anderen Seiten haben wir eine PHP-Datei. Aufgabe des PHP Programms ist es, die Platzhalter in der HTML-Datei mit konkreten Daten zu füllen.

<?php
include('class_template.inc.php'); 

$tpl = new Template('template1.tpl.html'); 

$datum date('d.m.Y'time()); 
$tpl->assign('title''Template Beispiel 1'); 
$tpl->assign('date'$datum); 
$tpl->out(); 
?>

Dazu legt das Programm zuerst ein Objekt der Klasse Template an, welches in der Variablen $tpl gespeichert wird. Als Parameter wird dem Konstruktor der Klasse, der Name der obigen HTML-Datei, welche die Platzhalter enthält, übergeben. Auf das Objekt $tpl können wir nur verschiedene Funktionen anwenden. Mit der Funktion assign() können wir einen Platzhalter in der HTML-Datei ersetzten. Im Falle von durch einen String, und im Falle von mit dem Wert einer Variablen, in die wir zuvor das aktuelle Datum gespeichert haben. Die Funktion out() gibt die fertige HTML-Datei aus.

Zuweisen eines Arrays

Angenommen wir möchten die drei beliebtesten Fußball Bundesligavereine ausgeben. Die passende HTML-Datei hierfür könnte in etwa so aussehen.

<HTML>
<HEAD>
<TITLE>TOP 3</TITLE>
</HEAD>
<BODY>
<BR>
<BR>

</BODY>
</HTML>

Nun wäre es möglich die Funktion assign() für jeden der drei Vereine einzeln aufzurufen, um den entsprechenden Wert zuzuweisen. Speichert man die benötigten Daten in einem Array, gibt es eine einfachere Möglichkeit.

<?php 
include('class_template.inc.php'); 

$tpl = new Template('template2.tpl.html'); 

$top3 = array(  'verein1' => 'Gladbach'
                
'verein2' => 'Bremen'
                
'verein3' => 'Cottbus'  
        
); 
$tpl->assign($top3); 
$tpl->out(); 
?>

Liegen die Daten wie hier in einem assoziativen Array vor, reicht ein einziger Aufruf der Funktion assign(). Die einzelnen Array-Werte werden dann automatisch den entsprechenden Platzhaltern zugeordnet.

Blöcke

Wie könnten wir nun vorgehen, wenn wir alle 18 Vereine der Bundesliga in einer Tabelle ausgeben möchten? Wir könnten alle 18 Werte einzeln zuweisen, wie im ersten Beispiel, oder alle Werte auf einmal zuweisen, wie im zweiten Beispiel. Bei den bislang bekannten Methoden verbleibt jedoch ein entscheidener Nachteil. Wir müssten für jeden der 18 Vereine einen Platzhalter in unserer HTML-Datei anlegen. Möchten wir zusätzlich die Position des Vereins ausgeben, sowie zeilenweise alternierende Hintergrundfarben darstellen, müssten wir eine Tabelle mit zwei Spalten und achtzehn Zeilen, sowie 54 Platzhaltern anlegen. Was ist, wenn wir eine Tabelle mit 100 Vereinen haben?
Die Lösung: Blöcke, eine Art "for-schleife" für Templates

<HTML>
<HEAD>
<TITLE>Alle 18</TITLE>
</HEAD>
<BODY>
<TABLE BORDER="1">
<!-- BEGIN verein -->
<TR bgcolor="">
 <TD><B></B></TD>
 <TD></TD>
</TR>
<!-- END verein -->
</TABLE>
</BODY>
</HTML>

Der Anfang eines Blocks wird mit <!-- BEGIN blockname --> gekennzeichnet. Es folgt der Inhalt des Blocks. Abgeschlossen wird ein Block mit <!-- END blockname -->.
Was sofort auffält, wir benötigen nur drei Platzhalter , , , und nicht 54.

<?php
include('class_template.inc.php'); 

$tpl = new Template('template3.tpl.html'); 

$vereine = array('verein1''verein2''verein3'
                
'verein4''verein5''verein6'
                
'verein7''verein8''verein9'
                
'verein10''verein11''verein12'
                
'verein13''verein14''verein15'
                
'verein16''verein17''verein18',); 

$tplVerein $tpl->fetchBlock('verein'); 
for (
$i=0$i<count($vereine); $i++) 

    
$tplVerein->assign('bgcolor'$i%'#FFFFCC' '#FFFF99'); 
    
$tplVerein->assign('pos', ($i+1)); 
    
$tplVerein->assign('name'$vereine[$i]);     
    
$tpl->assign('verein'$tplVerein); 
    
$tplVerein->reset(); 

$tpl->out(); 
?>

Der PHP-Code ist durch den Einsatz von Blöcken ein wenig komplizierter geworden. Wirklich neu sind nur zwei Funktionen. Der Funktion fetchBlock() übergeben wir als Parameter den Namen unseres Blocks (hier: verein). Die Funktion fetchBlock() arbeitet nun wie folgt. Sie schneidet den kompletten Block aus der HTML-Datei aus, und ersetzt ihn durch einen Platzhalter, der dem Namen des Blocks entspricht.

($tpl)

<HTML>
<HEAD>
<TITLE>Alle 18</TITLE>
</HEAD>
<BODY>
<TABLE BORDER="1">

</TABLE>
</BODY>
</HTML>

Aus dem ausgeschnitten Block erzeugt die Funktion fetchBlock() ein neues Objekt der Klasse Template. Dieses neue Objekt speichern wir in der Variablen $tplVerein. Wir arbeiten im folgenden also mit zwei Objekten der Klasse Template. Mit der Variablen $tpl erhalten wir Zugriff auf das obige Template, in dem der Block bereits ausgeschnitten ist. Die Variable $tplVerein ermöglicht den Zugriff auf unseren Block, welcher mittlerweile zu einem eigenständigen Template geworden ist.

($tplVerein)

<TR bgcolor="">
 <TD><B></B></TD>
 <TD></TD>
</TR>

In der for-Schleife ersetzen wir nun in unserem zweiten Template die Platzhalter , und durch die entsprechenden Werte. Damit ist dieses Template fertig bearbeitet, und wird nun für den Platzhalter im ersten Template eingesetzt. Dies geschieht mit dem Befehl $tpl->assign('verein', $tplVerein); Wir können einem Platzhalter (hier: verein) also auch ein komplettes Template-Objekt zuweisen.

<?php
... 
$tplVerein $tpl->fetchBlock('verein'); 
for (
$i=0$i<count($vereine); $i++) 

    
$tplVerein->assign('bgcolor'$i%'#FFFFCC' '#FFFF99'); 
    
$tplVerein->assign('pos', ($i+1)); 
    
$tplVerein->assign('name'$vereine[$i]);     
    
$tpl->assign('verein'$tplVerein); 
    
$tplVerein->reset(); 

... 
?>

Danach führen wir noch ein reset() auf dem zweiten Template aus, damit dieses für den nächsten Schleifendurchlauf geleert wird.

Erfahrungen


Jetzt bemerke ich überhaupt, dass die Platzhalter hier gar nicht angezeigt werden...
Geschrieben von westhues-a@ Am 12.05.2009 21:47:47

Ist soweit ein nettes, kleines Tutorial aber leider ist der Link zum angegebenen Templatesystem down :)
Geschrieben von westhues-a@ Am 12.05.2009 20:59:56

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe

Verwandte Beiträge

Installation von MySQL auf Linux

SuSE Linux Pro 8.2 mit mysql einfach installieren ...

Moqui

Autor : Moqui
Kategorie: Linux & Server Tutorials

Wie kann man komplexe Abfragen mit SQL-Querys In MySQLi effektiv durchführen?

In diesem MySQL-Tutorial wird erklärt, wie komplexe SQL-Abfragen in MySQLi effizient durchgeführt werden können. Wir werden uns mit verschiedenen Aspekten der Datenbankabfrage beschäftigen und spezifische Methoden kennenlernen. ...

TheMax

Autor : TheMax
Kategorie: mySQL-Tutorials

E-Mailprüfung mit JavaScript

In diesem Tutorial wird gezeigt, wie eine E-Mailüberprüfung in JavaScript realisiert werden kann ...

andy@

Autor : andy@
Kategorie: Sonstige Tutorials

Werte aus Flash an PHP und JavaScript, und umgekehrt senden

Dieses Tutorial soll euch zeigen, auf welche Weise ihr Werte aus Flash an PHP und JavaScript, und umgekehrt senden könnt. ...

Borlabs

Autor : Borlabs
Kategorie: Sonstige Tutorials

Einfaches News-Script

Das hier ist ein kleines Tutorial, um zu zeigen wie so ein News-Script aussehen kann. Im Grunde ist es nichts anderes als ein Gästebuch, in welches jedoch nur der Webmaster (oder sonstige authorisierte Personen) etwas eintragen kann. Natürlich kann man ...

pik

Autor : pik
Kategorie: PHP-Tutorials

Variablen über mehrere Seiten hinweg verwenden - der Session-Befehl macht 's möglich!

Oberste Voraussetzung um Session-Befehle korrekt auszuführen ist, dass der Provider a) PHP und b) das speichern von Sessions auf dem Server überhaupt erlaubt. Wird der Session-Befehl unterstützt jedoch nicht das direkte speichern von Sessions bzw. Sess ...

ndo@

Autor : ndo@
Kategorie: PHP-Tutorials

Was muss ich in WordPress einstellen, damit Google Fonts nicht mehr geladen werden?

Möchten Du WordPress davon abhalten, Google Fonts zu verwenden? Hier erfährst Du, was du dafür in WordPress einstellen musst. ...

admin

Autor : admin
Kategorie: Sonstige Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen