Was ist ein template?
-
Hi Leute,
ich hab mal da eine Anfängerfrafe:
Was ist ein template?1.)Wozu ist es gut?
2.)Wie code ich solch ein template?Die Frage bezieht sich auf die Webprogrammierung (zB mittels PHP).
Für Eure Antwort wäre ich sehr dankbar
mfg
-
Hier zwei Links, die man, nach ein bisschen durchklicken, direkt von den Links der PHP Seite erreichen kann...
http://codewalkers.com/tutorials/58/1.html
http://www.phpbuilder.com/columns/sascha19990316.php3?aid=55
-
Templates sind coole Dinge.
Ein Anfaenger bettet den PHP Code in den HTML Code ein, oder umgekehrt. Das ist fuers Anfang ganz ok, aber fuer grosse Anwendungen nicht mehr so geschick, weil je groesser eine Anwendung, desto groesser ist auch der Aufwand den PHP und HTML Code zu verwalten. Design Aenderungen sind dann sehr schwierig und auch die Zusammenarbeit mit anderen teammitgliedern klappt nicht ganz.
Sagen wir mal, ich programmiere gute und sichere Skripte, aber meine Deisgns sind kake. Du hast schoene Designs, aber deine Programmierkentnisse sind erschreckend. Wenn wir zusammenarbeiten, muessen wir beide sowohl PHP als auch HTML koennen, und das ist schlecht fuer uns. Deswegen sollten wir uns ueberlegen, einen Weg zu finden, wie man den PHP von dem HTML Code trennen kann, so dass ich unabhaengig deines Designs meine Skripte schreiben kann und du unabhaengig meines Codes dein Design weiter entwickeln kannst.Templates ermoeglichen das, denn man hat eine (strikte) Trennung vom PHP Code und HTML Code. Es ist auch so, dass der PHP Code generishcer wird, d.h. er muss nicht unbedingt HTML als Frontend haben, sondern kann auch gleichzeitig in eine Console benutzt werden, je nachdem wie das Design gemacht ist.
Templates sind nicht anders als .html oder .tpl Dateien, die irgendeinen HTML (oder sonst noch was anders haben) und an bestimmten Stellen Variablen gesetzt werden, z.b.
index.tpl
<html> <body> {CONTENT} </body> </html>
liste.tpl
<ul> {LISTE} </ul>
zeile.tpl
<li style="{ZSTYLE}">{ZCONTENT}</li>
Meistens macht man so, dass alles was zwischen {} liegt, eine Variable ist, die man belegen muss. Templates sind in der Regel Klassen, es gibt keine Generische Funktionen dafuer und ist je nach Template engine anders, deswgeen werde ich hier nur algorithmisch den PHP Code angeben.
index.php
<?php includiere template-engine.php $tpl = new TEMPLATE(PARAMETER) $tpl->bind( main => 'index.tpl', list => 'liste.tpl', zeile => 'zeile.tpl') for(irgendwas) { $tpl->assign( 'zeile', 'ZSTYLE', "irgendeinstyle"); $tpl->assign( 'zeile', 'ZCONTENT', "irgend Zeile Inhalt"); $tpl->parse('zeile') /*hier werden die Variable von zeil.tpl mit denen von assign zugewissenen Werten ersetzt */ $tpl->assign( 'list' , 'LISTE', $tpl->get('zeile')) } $tpl->parse('list') $tpl->assign( 'main' , 'CONTENT', $tpl->get('list')) $tpl->parse('main') echo $tpl->get('main') /* damit wird alles ausgegeben */ ?>
der Code ist eher ein Algroithmus, wie ein template engine funktionieren koennte, je nach enige aendern sich die Funktionen aber im Prinzip arbeiten alle so. D.h. du siehst, dass der HTML Code getrennt von PHP Code ist, somit kann man an beiden arbeiten, ohne den anderen "kaputt" zu machen oder verstehen zu muessen. D.h. eine moeglich Ausgabe waere:
<html> <body> <ul> <li style="color: red;">hallo</li> <li style="color: green;">HALLO</li> <li style="color: blue;">hAlLo</li> </ul> </body> </html>
-
Vielen Dank für eure Antworten
Sehr vielen Dank @supertux für die sehr umfangreiche Antwort
Aber eine Frage hätte ich doch:
Wiso löst man dieses Problem "der Trennung des codes vom design" nicht einfach mittels OO? Ich meine, dass die strikte Einhaltung der OO, und gut entwikelte klassen, den code um einiges sauberer machen. Ausserdem wäre da der "schreibanteil" im html teil mitels Aufrufen wie...
echo "<h1>" . $klasse->GetTitle() . "</h1>";
... kaum grösser als durch templates. Der Code spielt sich dann auch in der BlackBox (der Klasse) ab. Der designer (der htmler) braucht sich dann nur noch um denn korrekten Umgang mit der Klasse zu kümern.
Was meint Ihr?
mfg
-
Evtl. weil dann der Grafik/Designer mit Code in Kontakt tritt...
und was ist wohl einfacher ne komplette Template/Parameter übersicht oder dem Designer die ganze Klassenhierachie samt Beschreibung vorzulegen!^^
-
linu(x)bie schrieb:
Ausserdem wäre da der "schreibanteil" im html teil mitels Aufrufen wie...
echo "<h1>" . $klasse->GetTitle() . "</h1>";
... kaum grösser als durch templates. Der Code spielt sich dann auch in der BlackBox (der Klasse) ab. Der designer (der htmler) braucht sich dann nur noch um denn korrekten Umgang mit der Klasse zu kümern.
Was meint Ihr?
mfg
es geht nichtdarum, dass der Code größer oder kleiner wird, sondern dass PHP Code sich vim HTML Code trennt, sprich, dass das "Engine" unabhängig von der Ausgabe arbeitet und die Ausgabe etwas ausgibt unabhängig vom "Engine". So ist es möglich ein Template (Design) mit verschiedenen Sprachen zu benutzen, PHP, Perl, usw. Und umgekehrt auch, der selbe PHP Code könnte verschiedene Designs haben, ohne den Code ändern zu müssen, nur das Template änder sich. (z.b. die Pfade des Templates)
PS: mit "Engine" meine eher den Code des Skriptes.