# Template-Engine



## EuroCent (21. März 2007)

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


----------



## Gumbo (21. März 2007)

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?


----------



## Hroudtwolf (21. März 2007)

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.


----------



## EuroCent (21. März 2007)

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:


```
<?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


----------



## Gumbo (21. März 2007)

FreddyKruegger hat gesagt.:


> Ich möchte in einer PHP per eval(); ein Template aufrufen...


Keine gute Idee. Denn dadurch kann auch jeglicher PHP-Code ausgeführt werden, was eine gravierende Sicherheitslücke bedeutet. Außerdem ist es langsamer als die Variante des direkten Ersetzens.


----------



## birnkammer (21. März 2007)

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:

```
$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


----------



## EuroCent (21. März 2007)

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?


----------



## Flex (21. März 2007)

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.


----------



## boast (21. März 2007)

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).


----------



## EuroCent (21. März 2007)

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!


----------



## Hroudtwolf (22. März 2007)

Das sollte dich interessieren;
http://www.ister.org/code/ister/doc/tutorials/t24.html


----------



## EuroCent (22. März 2007)

Öhm... versteh ich nicht ganz sorry!

Ich bin in English nicht so der Hit, daher wäre es im Deutscher Sprache für mich einwenig vom Vorteil


----------



## muhkuh (22. März 2007)

Na, ums Englisch wirst du aber wohl kaum drumrumkommen  Ich kann dir aber mal empfehlen die Template-Klasse des phpBB anzugucken, die ist etwas anders aufgebaut, als Smarty, aber m.M.n. sehr angenehm im Einsatz.

Ich finde deinen Weg Templates einzusetzen aber etwas verwirrend, geradezu umständlich. Ich hab das so verstanden, dass du den HTML-Code für das Template inklusive aller Platzhalter in ein Formularfeld eingibst, dass dann abgeschickt wird und im Script "ausgefüllt" wird (Platzhalter ersetzen). Anschließend wird die ganze Schose dann als Datei gespeichert. D.h. also eine fertige HTML-Datei, so wie sie der Besucher sehen soll. Ich denke, dass es bei diese Lösung wesentlich schneller ginge statt der Platzhalter gleich den richtigen Inhalt in die Seite einzufügen.

Normalerweise dienen Templates dazu dynamische Inhalte, also wechselnder Art, bequem darstellen zu können. Die meisten Tempalte-Engines funktionieren so, dass eine Template-Datei bereits vorhanden ist, die vom Script dann eingelesen wird (z.B. mit file_get_contents(), woraufhin die Platzhalter (z.b. {PLATZHALTER}) durch den Inhalt aus der Datenbank ersetzt wird. Diesen kompilierte Code wird dann an den Browser ausgegeben (echo). An den Rohdaten der Template-Datei wird also nichts verändert, ebensowenig an den Daten in der Datenbank. Die kompilierte Template-Datei muss auch nicht gespeichert werden, um sie an den Browser ausgeben zu können. Das geschieht z.B. in einem Cache-System.


----------



## Radhad (22. März 2007)

Kann man die {Platzhalter} nicht auch durch bestimmte Scripts füllen lassen? Menü, Content (News-Script, Forum, Blog, ...) ? Denn so etwas würde ich gerne mal machen - eine HTML Datei für das Design und dadrin entsprechende Platzhalter für wie eben genannt: Menü, & Content (als Beispiel).


----------



## boast (22. März 2007)

Radhad hat gesagt.:


> Kann man die {Platzhalter} nicht auch durch bestimmte Scripts füllen lassen? Menü, Content (News-Script, Forum, Blog, ...) ?


U.A. genau DAS macht ein Tpl.System... 

My Favourite Template System:

```
<h1><?php echo($headings[1]); ?></h1> <!-- geht doch? -->
<h2><?= $headings[2] ?></h2> <!-- für die Faulen... -->
```


----------



## Radhad (22. März 2007)

Hmm... den Code kapier ich zwar imo nicht ;-) Aber so etwas möchte ich gerne verwenden, da ich dann schneller div. Designs verwenden könnte, da man dann ja Designs in der Datenbank registrieren könnte, um sie aus einem bestimmten Ordner zu laden (im Speziellen meine ich verschiedene CSS-Styles, könnten aber auch ganz andere HTML Dateien sein, die ein anderes Lokk&Feel vermitteln sollen).

Gibt es denn dafür eine kompakte Anleitung? Denn ich denke, dass Smarty dafür eigentlich schon zu groß ist und das ganze bremsen würde (stehe auch nicht so auf fertiges Zeug )


----------



## boast (22. März 2007)

Mein Post war eigentlich als Witz gemeint, bzw. zeigt meine pers. Einstellung zu diesem Thema: PHP selbst ist schon eine super Template Engine!


----------



## Radhad (22. März 2007)

net ganz  ich muss in die Design-Datei die ganze logik zum auswerten, welches Script geladen werden soll da mit reinschreiben, obwohl es damit nix zu tun hat. Da würd ich halt gerne trennen


----------



## peppijunior (22. März 2007)

> Zitat von FreddyKruegger Beitrag anzeigen
> Ich möchte in einer PHP per eval(); ein Template aufrufen...
> Keine gute Idee. Denn dadurch kann auch jeglicher PHP-Code ausgeführt werden, was eine gravierende Sicherheitslücke bedeutet. Außerdem ist es langsamer als die Variante des direkten Ersetzens.



Ich hab ne nette tpl Klasse, in der nur Variablen geparst werden 
Mach es auch meistens mit eval und hatte bis jetzt keinerlei Probleme


----------



## EuroCent (22. März 2007)

Also wie gesagt!

Ich will es so machen wie bei dem wBB eben... da wird auch erst der HTML Cde in die Datenbank gespeichert und es dann per Cachen in ein tpl konvertiert dabei ruft aber die PLATZHALTER ($index_bit beispiel) nicht auf das Template zu sondern auf die Datenbank also ist es garnicht mal so performence Fressend wie es allen anscheinend denken!

Ich arbeite mit der Forensoftware schon ziemlich lange und die Template-Engine ist garnicht mal so schlecht aufgebaut!

Also mir geht es ja nur darum das ich den inhalt in eine Datenbank speichere und diese wenn gebraucht wird aufgerufen wird in der DB zugleich soll eine geparste PHP datei in einem dafür angegebenen Ordner erstellt werden

Wenn ich dann zusätzlich das tpl brauch klicke ich auf cachen und es wird dann eines erstellt

Das mit {Platzhalter} ist für mich zwar nicht wirklich neu aber ich habe mich nun mal an das eval() und Platzhalter ($var) gewöhnt und würde dieses auch gerne so weiter für mich mit übernehmen!


----------



## daddz (22. März 2007)

Wo liegt eigentlich dein Problem mit Smarty?

Im Prinzip lässt Smarty sich ganz einfach handhaben und liefert eigentlich alles, was man braucht um Templates zu verarbeiten.


----------



## EuroCent (22. März 2007)

daddz hat gesagt.:


> Wo liegt eigentlich dein Problem mit Smarty?
> 
> Im Prinzip lässt Smarty sich ganz einfach handhaben und liefert eigentlich alles, was man braucht um Templates zu verarbeiten.



Weil ich mit Smarty nicht klar komme und es mir zu komplex ist


----------



## boast (22. März 2007)

FreddyKruegger hat gesagt.:


> Weil ich mit Smarty nicht klar komme und es mir zu komplex ist



Erm, was ist den das für ne Antwort? Die Grundfunktionen von Smarty sind absichtlich einfach gehalten, damit sie auch jeder (mit bisschen PHP-Fähigkeiten) versteht.
Falls Du Smarty zu komplex findest, solltest Du dich vielleich noch nicht an ein Templatesystem wagen, sondern an deinen PHP-Fähigkeiten arbeiten.

Die Anmerkung, dass Du mit dieser Haltung nicht weit kommst, muss leider auch noch sein.


----------



## EuroCent (23. März 2007)

Versteh mich nicht falsch aber irgendwie versteht ihr meine Frage nicht oder?

Ich frag nach einer Template-Engine die es mir ermöglicht per eval() Templates in php aufzurufen und im HTML dukos mit $vars arbeiten kann, mehr such ich immo nicht!

Und da brauch ich auch kein Smarty... zumal ich nicht gesagt habe das ich mit Smarty nicht klar kommen würde aber es entspricht nicht meinen Vorstellungen!

Überall wo ich schon angefragt habe kommen diese antworten mit Smarty...
Wer Smarty nehmen will soll es mir ist es für meine Sache zu komplex und daher such ich ein einfaches TuT wo ich mein eigenes Template-Engine bau kann!

Ich finde es ja schön das man mit vorgefertigten Template-Engine arbeiten sollte aber da ich mich auch auf diese Art und weise Fortschreiten will wäre es vom Vorteil so etwas auch mal zu können!

Ich hoffe nun hat sich die Frage mit Smarty geklärt...


----------



## muhkuh (23. März 2007)

Naja, ich weiß zwar immer noch nicht genau was du genau willst. Ich lese zwar an allen Ecken und Enden Template, Cache und Datenbank und eval(), aber meiner Meinung nach wurde bereits soweit alles beantwortet. Ich bin jetzt einfach mal nen Schritt zurück gegangen und dann müsstest du genau das hier machen:

Inhalt der Datei *template.php*

```
/* Einzige Voraussetzungen für das Script:
    * 1. Datei mit Template heißt template.tpl und liegt im gleichen Verzeichnis wie das Script
    * 2. Es besteht eine offene Verbindung zu einer Datenbank, die die Tabelle tpl_contents enthält
    * 2.1 Felder der Tabelle: content_id, content_title, content_text, content_datetime
    */

    // Daten aus Datenbank auslesen
    $query = "SELECT
                content_id,
                content_title,
                content_text,
                DATE_FORMAT( content_datetime , '%d.%m.%Y, %H:%i:%s' ) AS content_datetime
            FROM
                tpl_content
            ORDER BY
                content_id DESC
            LIMIT
                0,6
        ";
    $result = mysql_query( $query ) 
            OR die( 'Datenbank-Query konnte nicht ausgef&uuml;hrt werden! LINE: ' . __LINE__ - 1 . "\n\n" . mysql_errno . ': ' . mysql_error );

    // Array für Daten instanzieren
    $arrContent = array();

    // Array mit Daten aus der Datenbank füllen
    while( $content = mysql_fetch_assoc( $result ) )
    {
        $arrContent[][ 'id' ] = $content[ 'content_id' ];
        $arrContent[][ 'title' ] = $content[ 'content_title' ];
        $arrContent[][ 'text' ] = $content[ 'content_text' ];
        $arrContent[][ 'datetime' ] = $content[ 'content_datetime' ]; 
    }
    
    // Elemente des Content-Arrays zählen
    $count_arrContent = count( $arrContent );

    // Inhalt der Templatedatei holen
    $template_uncompiled = file_get_contents( 'template.tpl' )
            OR die( 'Konnte Datei template.tpl nicht einlesen! LINE: ' . __LINE__ - 1 );

    // Template ausführen
    eval( $template_uncompiled );
```
So, das wäre die Script-Datei. Ich habe diese aber nicht getestet und habe auch nur eine recht einfache Fehler-Routine eingebaut. Die Daten aus der Datenbank habe ich deswegen in einem Array gespeichert, da sich dieses auch recht einfach mit Daten aus einer anderen Quelle füllen lässt und sich dadurch später auch im Template einfacher einsetzen lässt.

Inhalt der Datei *template.tpl*

```
<!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" xml:lang="de" lang="de">
    <head>
        <title>Template-Test</title>
    </head>
    <body>
        <h1>Ausgabe des Inhalts aus der Datenbank!</h1>
        for( $i = 0 ; $i < $count_arrContent ;  $i++ )
        {
        <div style="width:400px;margin-bottom:20px;">
            <h2>$arrContent[ $i ][ 'title' ];</h2>
            <span style="font-size:80%;">Erstellt am: $arrContent[ $i ][ 'datetime' ]; Uhr</span>
            <p>nl2br( $arrContent[ $i ][ 'text' ] );</p>                
        </div>
        }
    </body>
</html>
```

Wie gesagt kann ich keine Garantie darauf geben, dass das Ding wirklich funktioniert. Ich denke aber, dass die Ansätze klar sein sollten. Im Prinzip kann sich das jeder selbst mit rudimentären PHP-Kenntnissen selbst erstellen. Ich persönlich finde das aber keine wirklich elegante Lösung, da hier der Code eigentlich nicht vom Inhalt getrennt wird, lediglich ausgelagert.

PS: Hab ein wenig rumprobiert und das ganze nicht zum laufen gebracht. Die Funktion eval() macht da Schwierigkeiten, ich bin mir also nicht sicher, ob das Ganze in der Form überhaupt möglich ist, möchte es aber trotzdem mal stehen lassen. Ehrlich gesagt ist mir der Sinn der Funktion eval() noch immer ein wenig schleierhaft.


----------



## Radhad (23. März 2007)

Wie gut lässt sich denn Smarty auf einem gemieteten Webspace nutzen? Laut Installationsbeschreibung muss ich eine Library hinzufügen, aber darauf habe ich ja keinen Zugriff ^^ Wie gesagt, ich suche nur eine einfache Möglichkeit {PLATZHALTER} durch ein Script zu ersetzen. Dies soll am besten auch auf jedem Webspace lauffähig sein.


----------



## P_F (23. März 2007)

Hi, ich würde dir auch empfehlen, smarty zu verwenden. Wenn du die templates browserbasiert bearbeiten möchtest, mache das template-directory writeable und bearbeite die dateien in einer textarea.


----------



## daddz (23. März 2007)

FreddyKruegger hat gesagt.:


> _(...)_ und daher such ich ein einfaches TuT wo ich mein eigenes Template-Engine bau kann!


Schau dich doch mal hier in den Tutorials um. So weit ich mich erinnern kann, gibt es sogar mehrere Template-Tutorials.


----------



## Radhad (23. März 2007)

Hätte vielleicht ein kleines Beispiel, wie eine HTML-Datei für Smarty aussehen muss und wie dazu eine kleine PHP-Datei aussehen müsste? Ich will mir das mal genauer anschauen.


----------



## muhkuh (23. März 2007)

Beispiel zur Anwendung von Smarty http://tut.php-q.net/template.html Eine gute Anlaufstelle ist, wie in den meisten Fällen, die Homepage selber http://smarty.php.net/ (RTFM ) Ansonsten wie immer http://www.google.de/search?q=smarty

Wie schon erwähnt bietet die Template-Engine des phpBB auch die Möglichkeit Templates zu nutzen. Beispiele kann man sich direkt aus den schon vorhandenen Templates und dem dazugehörigen Code abgucken http://www.phpBB.com


----------



## maverick38 (4. Mai 2007)

Hi, ich wollte fragen, ob es ein tutorial gibt, in dem man template system machen kann, also mit .tpl dateien, die ich dann in einer .php aufrufe also ich mache eine datei
z.b. index.tpl, diese soll dann so ungefähr aussehen

<html>
<header>
$Headinclude
</header>
$header
<body>
Text...
...
$footer
</body>
</html>

dann soll es wenn möglich einen adminbereich haben, in dem ich die .tpls öffnen und bearbeiten kann!

Alkso, wäre echt cool wenn einer weiter wüsste!


----------



## TchiboMann (5. Mai 2007)

@felix Jacobi



> Warum willst du überhaupt die Templates in einer Datenbank speichern?
> Warum nicht direkt in die Template Dateien?



Der Sinn dahinter ist z.B. die doppelte Sicherung  Sagen wir mal, du hast unabsichtlich im FTP-Program auf die ENTF-Taste gedrückt, als du einen Ordner selektiert hast, zufällig  wars der Templateordner. Du tust des als Hinweismeldung hab und klickst versehentlich auf OK, weil du auch grad an was andres gedacht hast. Zack, dein Templates-Ordner ist futsch. Hast auch grad keine aktuelle Sicherung, shitt...

Da springt dann die Datenbank ein  Das PHP-Script checkt, ob das Template als File vorhanden ist. Wenn nein -> Hole Template aus Datenbank, schreibe dies neu in eine Datei, lade die Datei. Ist im Prinzip sehr Praktisch, falls mal wirklich versehentlich etwas gelöscht wird 

@maverick38
Ähm, lies dir den Thread komplett durch bitte. Da hast du zig Antworten, die dir weiterhelfen.


----------



## Flex (5. Mai 2007)

Gut, das gleiche kann dir mit deiner kompletten PHP Scripts genauso passieren, hast du die auch in der Datenbank als Backup?
Oder mit deinem gesamten Programm Ordner unter Windows?

Dafür gibt es Backups, diese sollten aber meiner Meinung nach nicht die Geschwindigkeit einer Applikation verringern.


----------



## TchiboMann (5. Mai 2007)

jo, sicher, das iss scho richtig  naja, es iss jedenfalls ne art Sicherung, obs nu sinnvoll ist oder nich, das muss ja jeder für sich selbst entscheiden 

ich persönlich halte eh nixx von solchen Templateparsern, die rauben schlichtweg unnötig viel ressourcen. Ich machs bei meinem cms so, dass alle style-bedingten Dinge in php-funktionen stehen und die gesammelt in einer einzigen PHP-datei, performancetechnisch ist das sicherlich besser als n Templateparser... Hab da meine leidige Erfahrung mit dem ecms von ecms-media.de^^ Einziger Nachteil ist eben, dass man sich ein wenig mit PHP auseinandersetzen muss, wenn man ein Style auf das CMS anpassen will...Aber das soll mich nich jucken


----------



## Flex (5. Mai 2007)

Ich finde Template Systeme sehr nützlich, was die Trennung von Code und HTML/Design angeht. 
Was aber noch viel angenehmer ist, ist das schöne Caching System dass die meisten mit sich bringen. (Siehe z. B. Smarty)

Weitere Vorteile liegen im OOP Bereich, dass man z. B. MVC nutzen kann.
Man muss sich nicht mehr so oft wiederholen (mehrere Templates in verschiedenen Funktionen einsetzen)


Und wenn es wirklich so unperformant wäre, würde es keiner einsetzen.


----------



## TchiboMann (5. Mai 2007)

jor, wills mal so sagen, einmal schlechte Erfahrung mit Templateengines gemacht misstraut man diesen  Hab mal nen Apache Benchmark mit meinem (nich nicht fertigen) cms, und dem ecms von ecms-media.de gemacht... heraus kam, dass meine Methode oftmals 17x schneller arbeitet als das ecms, beispielsweise 3,6 requests/sek beim eCMS, satte 44 Requests bei meinem CMS. Als vergleich hatte ich noch PHP Fusion, mit ca 31 requests/sec. Mag sein, dass es nich viel aussagt, mein CMS iss alles andre als perfekt im Moment, und noch nicht wirklich fertig, aber ich denk mal dasses für nen "anfänger" wie mich ganz passabel ist^^

Naja, ich werd mir sicher mal smarty anschaun, wobei ich nich weiss, ob das nicht viel zu komplex ist. Ich habs gern sehr simpel und übersichtlich. Und naja, ich denk scho dasses nich so sehr performant ist, wie die Style-Sachen in einzelne funktionen zu packen (was durchaus aufwändiger ist, seh ich ein). Bei großen Seiten denk ich mal macht sich sowas durchaus bemerkbar, bei kleineren Seiten isses wohl eher egal...

Ich glaub ich werd mal, wenn mein cms fertig iss, n templatesystem einbauen und das dann mal direkt vergleichen, ich glaub nur so kann ma wirklich rausfinden, was schneller iss, alles andre iss wohl eher spekulation. Aber ich weiss z.B. dass Systeme wie Webspell (auch Templatebasiert), sehr sehr unperformant sind und sehr sehr schnell an ihre grenzen stoßen... 

und jo, OOP werd ich mich noch mit auseinander setzen müssen, ich denk mal das dürfte auch nen performanceschub geben gegenüber einer "allerweltsprogrammierung" wie es "Anfänger" machen... oder? Vorteile hats auf jeden, hinsichtlich des ausbaus und der Erweiterbarkeit, das ist klar.


----------



## maverick38 (6. Mai 2007)

Genau das ist das was ich nicht will, ich möchte kein ausgeschmücktes Smarty mit newsscripten, jegliche Seiten, ich möchte ganz schlicht und infach ein Templatesystem, wo es den Template inhalt in eine .tpl Datei speichert, es muss nicht mit einer Datenbank laufen, sollte aber halt nen einfaches CMS sein, in dem ich mein Templateinhalt eingeben kann, wie oben genannt.

Das ganze soll dann durch folgenden code in einer php datei das Template aufrufen:
<?php
$filename='webdesign.php'; // Datei name!

require ("./global.php");

$tplname="webdesign"; // Template name ohne .tpl Endung

eval("\$tpl->output(\"".$tpl->get($tplname)."\");");
?>

Mehr soll es gar nicht sein!


----------



## Flex (6. Mai 2007)

Smarty hat keine News Scripts o. ä. sondern ist eine mächtige Template Engine (die übrigens grad mal 315KB groß ist) die alles bietet was man braucht.

Zu [phpf]eval[/phpf] hier ein paar Links:

Don't be eval
Eval is Evil Part One
Eval is Evil Part Two
Eval is Evil Part Three

Natürlich lässt es sich nicht zu 100% von JavaScript zu PHP übertragen, aber ich denke man  bekommt einen ganz guten Einblick und warum soviele Leute davon abraten.


----------



## maverick38 (7. Mai 2007)

ja also kann mir keiner so etwas bieten, weil ich möchte kein so fertiges, wenn dann richtig!


----------



## Flex (7. Mai 2007)

Du fragst ob dir jemand eins geben kann, willst aber gleichzeitig kein Fertiges haben.
Irgendwie verwirrend.

Wieso sind die Fertigen keine Richtigen?

Und ich wüsste spontan kein Tutorial, was dieses Ausmaß umfasst... Denke da bleibt nur Eigenarbeit übrig.


----------



## maverick38 (8. Mai 2007)

Ich meine, das ich kein smarty oder phpbb oder wie die alle heissen möchte, möchte ein schlichtes, leichtes.

D.h. ich möcht au nich unbedingt ein cms, sollt halt leichter sein inhalte für die page zu machen!


----------



## Flex (8. Mai 2007)

Template Systeme sind dafür da Designänderungen schneller und leichter durchzuführen.
Auch um eine Trennung von Code zu ermöglichen.

Eigentlich sind sie nicht dafür da um Inhalte einzupflegen.

Aber schau mal hier:

Mini Template Klasse von xCondoRx
PHP Templates von Patrick Kamin
TemplateParser Klasse imt verschachtelten Blöcken von fanste


----------



## Gumbo (8. Mai 2007)

Ein Template-System ist dafür da, um Vorlagen (englisch _templates_) mit Inhalt zu füllen, so dass die Inhalte und die Strukturierung der Inhalte von einander getrennt sind. Welche Art von Vorlagen das sind, ist erst einmal irrelevant.


----------



## maverick38 (8. Mai 2007)

ja ich weiss, daher möchte ich auch kein großes tpl ich möchte html einbauen und phpdats machen, auserdem das design schnell ändern können, ohne jede einzelne seite neu zu machen, also nur inhalt und design extra machen!


----------



## forsterm (8. Mai 2007)

Hallo,
eventuell ist ja das hier was für dich. 

mfg
forsterm


----------

