Template-Engine

EuroCent

Klappstuhl 2.0
Hallo ich wollte mal fragen ob es ein Tutorial gibt in dem man ein eigenes Template-Engine bauen kann!

Muss nicht mit MySQL oder so sein... es sollte aber wenn möglich gut erklärt sein!

Den ich habe vor ein CMS - System zu machen in dem man die Teplates (.tpl) bearbeiten kann ohne die Datei anfassen zu müssen!

Ich hoffe mir kann da einer einpaar Tuts geben die mir das erklären!

Danke
 
Was soll die Template-Engine denn können? Einfach nur Platzhalter durch Werte ersetzen, komplexe Kontrollstrukturen wie bedingte Blöcke und Schleifen oder sogar Funktionen, sodass die Verarbeitung der Werte auch im Template bestimmt werden kann?
 
Die Frage von Gumbo ist mehr als berechtigt.
Ferner muss man sich diese Frage selbst stellen bevor man mit einem CMS anfängt.


Was soll es können ?
Wie setze ich es um ?


Da du ein Turorial zur Sache suchst, nehme ich an dass du noch nicht so weit mit PHP bist.
Die essentiellen Funktionen einer Template-Klasse sind Arrays und die String-Funktionen, wobei wichtigst Str_Replace.
Das sind Bereiche mit denen du dich zunächst einmal beschäftigen solltest.

Bei einer Template-Klasse solltest du darauf achten eine Methode zum Setzen von Assoziation zu haben.
Diese Assoziationen ersetzen beim Ausfüllen des Templates die Platzhalter ( { Platzhalter} ).
Du benötigst eine weitere Methode zum Laden und Bearbeiten eines Templates.
Diese Methode nutzt die Assoziationen die über erstere Methode angelegt wurden und ersetzt die Platzhalter gegen ihre assoziative Entsprechung.
Nun brauchst du noch ne Methode oder ein Var-Member die/das dir das ausgefüllte Template zurückgeben kann. Wobei du das bedarf auch über zweitere Methode lösen kannst.

Das war nun nur ein kleiner Ausschnitt von dem was vor dir liegt.
Wenn du magst mach ich dir schnell nen kleinen Code-Schipsel.
 
Ich möchte in einer PHP per eval(); ein Template aufrufen...

Beispiel code so: eval("\$tpl->output(\"".$tpl->get("test")."\");");

Das heisst wenn ich per Formular einen Quelltext abschicke an die DB

Beispiel:

Code:
<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de" xml:lang="de">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
</head>
<body>

$bit

</body>
</html>

Dann soll das TPL-Engine aus der DB das TPL parsen und mir es als datei.tpl speichern!

wenn ich nun aber:

eval("\$bit .= \"".$tpl->get("test_bit")."\";");

mach dann soll geprüft werden ob ein Template mit dem namen überhaupt gibt... wenn nicht soll eine Meldung kommen beispiel: Template "Name.tpl" nicht vorhanden

Ich hoffe man versteht was ich damit meine und was ich brauche
 
Naja ich bin nicht so ein Freund von eval() und verwende es eigentlich nur, wenn es nicht anders zu lösen geht.

Warum machst du es nicht so:
PHP:
$template = "template.tpl";
$str = file_get_contents($template);
$str = str_replace('$bit', "Der neue Text", $str);
echo $str;
Ist jetzt natürlich sehr simpel aber leich zu erweitern

Viele Grüße
 
Achso...

Welches wäre da dann am besten angebracht!

Also ich möchte ja über ein Formular neue Templates anlegen und diese dann in eine Datenabnk speichern!

Diese Lese ich dann mittels Select aus um diese eventuell bearbeiten zu können!

Das ist ja alles nicht das Problem!

Aber wie mach ich es das er den Inhalt aus der Datenbank in eine .tpl datei schreibt!

So das ich es dann eventuell per $template[datei] aufrufen kann auch im HTML Dokument?
 
Warum willst du überhaupt die Templates in einer Datenbank speichern?
Warum nicht direkt in die Template Dateien?

Der Aufwand bei einem Aufruf wäre m.M.n. enorm, sprich:

Seitenaufruf, Datenbankaufruf => Template wird ausgelesen => Inhalt wird aus Datenbank gelsen => dynamischer Inhalt wird eingefügt => Template Datei wird erstellt und an den Browser ausgegeben

So verstehe ich dein System momentan... Korrigiere mich, wenn ich es falsch verstehe.

Weiterhin warum nicht eins der fertigen verwenden? Gerade bei Templatesystem finde ich es ratsam sich die Fertigen einmal anzuschauen, da diese oft viel größeren Komfort bieten, als man selbst einfach mal schnell hinprogrammiert. Sprich Schleifen, Bedingungen, eigene Funktionen, etc.
Der Nachteil ist natürlich die Einarbeitung in etwas Neues, aber gerade weitverbreitete Systeme, wie z. B. Smarty, sollten bekannt sein.
Weiterhin ist das Cache System in einem Templatesystem m.M.n. wichtig, gerade wenn es um größere Seiten geht, die stark besucht sind oder einen großen Andrang standhalten sollten.
 
Eben mit bisschen Cashing hat man den Geschwindigkeitsverlust der DB schnell wieder flott. Vorteil wäre natürlich die einfachere Editierbarkeit per z.B. eines ACPs.

Smarty ist recht cool - wenn man alle Funktionen (oder möglichst viele) gebrauchen kann. Der Rest ist nur unnötiges Rechnergebremse... imho

@FreddyKruegger: Nach dem Absenden (add oder edit...) des Templates rufst Du noch eine Funktion auf, welche Dir alles in das gewünschte File schreibt (fopen(), file_put_contents(), ... evt. (wenn mehrer User zugreiffen können) lohnt es sich, noch etwas über LOCKS in erfahrung zu bringen).
 
Hmm... ja aber welcher wäre da am vorteilhaftesten?

Mit Smarty komme ich einfach nicht zu recht!

Ich wollte es so machen:

- im AdminPanel neues Template anlegen!
- nach abschicken in die Datenbank
- Parser holt sich den Eintrag und erstellt dieses Template
- das selbe beim bearbeiten
- Template löschen, DB-Eintrag wird gelöscht, Template soll gelöscht werden!

So wenn ich dann eine Seite aufrufe wo ich das Template mit beispiel: $template[bsp] dann soll er dieses Template suchen und dann anzeigen!

Wenn ich das Temp nicht angelegt habe soll ja diese Fehlermeldung kommen: Template "Template-Name" nicht gefunden!

Ich will es aus dem Grund in die DB speichern um eine Sicherung zu haben!

Den wenn ich beispiels weise dieses Template gelöscht habe, aber brauche es, dann gehe ich ins ACP und klicke bei Templates auf Aktualisieren dann soll er alle neu Parsen und fehlende erstellen! Die ich benötige

Ich hoffe man könnte mich nun verstehen warum ich es in die Datenbank speichern will!
Ich will/möchte deshalb ein eigenes Template-Engine haben um mich damit überhaupt einmal damit auseinander setzen zu können!

Wenn ich eins Finden würde welches das könnte was ich will und dieses mit $variable[template-name] oder mit dem eval() macht dann nehm ich dieses auch und werd es dann an mich gegebenfalls anpassen!

Wie gesagt ich möchte es eben so machen das Template in DB gespeichert wird aus Sicherungsgründen, den wenn ich ein Template nicht in die Datenbank schreibe und ich dieses Template lösche... muss ich ja alles wieder von vorne schreiben und genau das will/möchte ich verhindern!
 

Neue Beiträge

Zurück