Templates: eigenes System zum einbinden

Hier zeige ich Euch, wie Ihr mit ein paar kleinen Funktionen, Euer eigenes Template-System programmieren könnt.
Templates! Wozu eigentlich?
Ganz einfach! Ihr könnt damit ganz einfach das komplette Design eurer Homepage innerhalb kürzester Zeit ändern!
Es gibt viele Möglichkeiten Templates einzubinden. Ich stelle hier nur meine Lösung vor.
Achso, das ist mein erstes Tutorial, also seid bitte nicht allzu streng.
Ihr braucht dazu mindestens 3 Dateien:
1. die Datei die von den Besuchern aufgerufen wird (hier index.php)
2. eine Template-Datei (hier design/euer_design/templates/index.html)
3. euer Stylesheet (hier design/euer_design/euer_stylesheet.css)
Die Datei „design/euer_design/templates/index.html“
Sie enthält den eigentlichen HTML Quelltext der den Besuchern ausgegeben werden soll. Jedoch nur den Teil der statisch ist, d.h. der auf all euren Seiten gleich ist.
--BEGINN--
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>{$templ['index'][pagetitle]}</title>
<link rel="stylesheet" href="/design/{$config['design']}/euer_stylesheet.css" type="text/css" />
</head>
<body>
<table class="mainTab" width="100%" cellpadding="0" cellspacing="0">
<tr><td colspan="5">{$templ['index'][pagetopic]}</td></tr>
<tr><td colspan="5"> </td></tr>
<tr>
<td class="" valign="top">{$templ['index'][left_boxes]}</td>
<td> </td>
<td class="content" valign="top">{$templ['index'][content]}</td>
<td> </td>
<td valign="top">{$templ['index'][right_boxes]}</td>
</tr>
<tr><td colspan="5"> </td></tr>
<tr><td> </td><td colspan="3">{$templ['index'][footer]}</td><td> </td></tr>
</table>
</body>
</html>
--END--
Nun zur index.php
Hier müssen wir zunächst einmal einige Variablen definieren:
<?php
$config['design'] = 'euer_design'; // der Name des Ordners in dem die Templates eures Designs liegen
$templ = array(); // enthält den variablen Teil eurer HTML-Quelltexte und wird in jedem Script neu definiert
?>
Nun brauchen wir eine Funktion, die den Inhalt der Template-Dateien einliest und die Variablen (z.B. $templ) ersetzt:
<?php
function fetchTemplate( $template)
{
global $templ, $config; // damit Ihr auf die Variablen auch innerhalb der Funktion zugreifen könnt
$handle = fopen (__FILE__ . '/design/' . $config['design'] . '/templates/' . $template, "rb");
$string = fread ($handle, filesize ($template));
fclose ($handle);
eval("$output .= "" .$string. "";"); // hier werden die Variablen $templ und $config durch euren Inhalt ersetzt
return $output;
}
?>
Wie wird das jetzt benutzt?
<?php
$templ['index']['pagetitle'] = 'euer Seitetitel';
$templ['index']['pagetopic'] = 'eure Seitenüberschrift';
$templ['index']['left_boxes'] = 'linkes Menu';
$templ['index']['content'] = 'Seiteninhalt';
$templ['index']['right_boxes'] = 'rechtes Menu';
$templ['index']['footer'] = 'Fußzeile';
$ausgabe = fetchTemplate('index.html');
echo $ausgabe;
?>
Das Ganze könnt und solltet Ihr dann mit mehreren Dateien machen und diese verschachteln.
z.B.:
<?php
$templ['content']['was_auch_immer'] = 'Seitentext';
$templ['index']['content'] = fetchTemplate('content.html');
$ausgabe = fetchTemplate('index.html');
echo $ausgabe;
?>
Die Funktion fetchTemplate() solltet Ihr aber in eine Extradatei oder auch Klasse auslagern und diese dann mit weiteren zugehörigen Funktionen erweitern.
Ein Beispiel für ein ähnliches System findet Ihr auf http://www.wayoflan.de/. Dort wird ein System namens Lansuite eingesetzt, welches ein gutes Beispiel dafür ist.
Ich hoffe das Tut ist verständlich und hilft Euch ein wenig weiter.
Bei Fragen postet einfach ein Kommentar!
MFG dolito

Passend zum Inhalt empfehlen wir:
Programmieren lernen für Anfänger
So habs mir mal grob angeschaut, auf den ersten Blick dürfte es ganz machbar für Anfänger sein ^^.
Werde es dann gleich mal ausprobieren...Danke
Ich habs leider gleich 2 mal runter geladen
Super Tutorial! Muss ich gleich ausprobieren!
könnte ein bischen ausführlicher sein
Ich finde es auch sehr gut. Danke.
Nettes Tut für nen templatesystem aber für anfänger ist die erklärung etwas zu mangelhaft ich bezweifle das jemand der wenig bis kaum Erfahrung mit php hat es richtig rüberbekommt
bedanke mich ebenfalls, hat mich meinem ziel ein stück näher gebracht.
Ich finde im PHP-Code sollten gerade für Anfänger mehr Kommentare stehen, was allerdings vorhanden ist, ist gut beschrieben.
Gab mir ne kleine Anregung für ein eigenes Template-System, vielen dank dafür.
Also, ich muss sagen, das ich als Anfänger immer noch nicht weiß wie und was genau jetzt gemacht werden soll.
Könnte mir ggf. mal jemand mit Lansuite helfen ?
Nutzte auch eine neuere Version, macht das irgendwelche Unterschiede ?
Über ein Feedback wäre ich echt euch dankbar, da ich kurz vor der Verzweiflung stehe ....
schönes tutorial, 5 sterne!
Für Anfänger super geschrieben und auch klasse erklärt.
blöder weise werden die backslash bei eval immer entfernt, deswegen seht euch http://at2.php.net/manual/de/function.eval.php an, da steht die richtige syntax von eval
mfg Zauberfisch
super tut, hat mir sehr geholfen, werd meine hp jezt so aufbaun
leider waren einige fehler drin ): weis nicht ob mein server anders eingestellt ist als andere^^ oder ob dir hier fehler untergekommen sind, jedenfals hab ich das script überarbeitet und bei mir läuft es jetzt: hier die index.php:
$config['design'] = 'euer_design'; // der Name des Ordners in dem die Templates eures Designs liegen
$templ = array(); // enthält den variablen Teil eurer HTML-Quelltexte und wird in jedem Script neu definiert
function fetchTemplate($template)
{
global $templ, $config; // damit Ihr auf die Variablen auch innerhalb der Funktion zugreifen könnt
$filename = 'design/'. $config['design'] . '/templates/' . $template;
/***das __FILE__ hat bei mir den wert: c:/.../httpdoc/www.xxx.at/index.php daher lasse ich es weg das setzt aber voraus das der desing ordner im selben ordner ist wie die index.php***/
$handle = fopen ($filename, "rb");
$str = fread ($handle, filesize($filename)); /*** filesize musste ich den ganzen pfad und nicht nur den filenamen angeben***/
fclose ($handle);
eval("$str = "$str";");
return $str;
}
$templ['index']['pagetitle'] = 'euer Seitetitel';
$templ['index']['pagetopic'] = 'eure Seitenüberschrift';
$templ['index']['left_boxes'] = 'linkes Menu';
$templ['index']['content'] = 'Seiteninhalt';
$templ['index']['right_boxes'] = 'rechtes Menu';
$templ['index']['footer'] = 'Fußzeile';
$ausgabe = fetchTemplate('index.html');
echo $ausgabe;
PS: hab ein paar variablen namen geändert und welche hinzugefügt ... nicht verwirren lassen
Großartiges Tut, allerding ein kleines Syntaxfehler
eval ("$output .= "" .$string. "";");
so ist die Zeile richtig
gutes tut, wird mir bei meinem website project sicher sehr helfen
danke für das tut, könnte aber etwas anfängerfreundlicher erklärt sein, ich würde bezweifeln das ein anfänger das versteht.
Parse error: parse error in C:Programmexampphtdocsluwaluwa-designincludesfunctions.php on line 10
[php]
[/php]
ist die Zeile mit dem "eval"... will bei mir einfach nicht funktionieren...
Hoffe auf eine Baldige Antwort
mfg
Ja kein schlechtes System. Ich bekomme zwar ne Fehlermeldung aber die Idee ist gut und hat mir Spaß gemacht. Ich würde wenn ich Zeit habe mal ne Klasse schreiben die dein System Implementiert falls dir das genehm ist.
Mehr anzeigen