Willkommen in der Webstatt Zum Webstatt Blog und Stories
Rebel4s Rebel4s am 13.07.07 14:49

Was sind die Vorteile einer eigenen Template-sprache?
z.B. Smarty hat ja eine eigene Syntax. Aber was sind die Vorteile davon? Es werden doch eigentlich nur unnötig Ressourcen verschwändet.
Es ist schon echt praktisch schleifen oder so in Templates zu verwenden, aber warum dafür eine eigne Syntax? Oder gibts da einen Sicherheitsaspekt, den ich momentan nicht erkenne?

Also was sind die Vorteile einer eignen Template-Sprache?

netcup.de Warum gibt es hier Werbung?
Franky Franky am 13.07.07 14:57

also ich benutz' bei meinen projekten immer mein eigenes tplsystem.. vorteile sind ganz klaa: du weißt wirklich ganz genau wie alles funktioniert. das hat wiederrum den vorteil das du fehler schnell finden kannst und so ;-)
bei smarty ists halt so, hab mir das auch mal angeguckt, dass du dich da richtig reinarbeiten musst. arbeitest du allerdings mit mehreren leuten an einem projekt, wirds wieder einfach, da vll. viele sich damit schon auskennen und so..

ist wie die frage: 'cms selbst proigrammieren oder ein fertiges nehmen?'..

Rebel4s Rebel4s am 13.07.07 14:59

Ich will mir ja ein tpl System selbst schreiben. Nur ich steh momentan vor der Frage eine eigene Template Sprache zu implementieren, wie z.B. bei Smarty.
Oder mir die Arbeit zu sparen und statt dieser Template-Sprache einfach auch PHP in den Templates zu verwenden.
Dabei soll natürlich Design und Logischer Coder weiterhin getrennt werden.

Johannes am 13.07.07 15:05

Warum sollte man in Templates, die man verwendet um HTML von PHP zu trennen, trotzdem PHP verwenden? Wäre inkonsequent.
Hab das bei meiner Template-Engine so gelöst, dass ich das ganze in HTML-Ähnlichen Tags versteckt habe:

<wts:if $array.index == '42'>Hallo <wts:$array.index3></if>
Ist einfach zu verstehen und gut anzuwenden.

Rebel4s Rebel4s am 13.07.07 15:06

Quote
Original von Johannes
Warum sollte man in Templates, die man verwendet um HTML von PHP zu trennen, trotzdem PHP verwenden? Wäre inkonsequent.
Hab das bei meiner Template-Engine so gelöst, dass ich das ganze in HTML-Ähnlichen Tags versteckt habe:

<wts:if $array.index == '42'>Hallo <wts:$array.index3></if>
Ist einfach zu verstehen und gut anzuwenden.


Es ist zwar inkonsequent, aber es würde die Arbeit stark vereinfachen.
Und ob man nun PHP oder HTML-Ähnliche Tags verwendet, warum verwendet man nciht gleich PHP?

Johannes am 13.07.07 17:15

Naja. Ich persönlicher würde es für Anfänger als sicherer einstufen, wenn Sie sowas vor sich haben als PHP.
Abgesehen davon kann man so ganz klar die Möglichkeiten eingrenzen, die der Ersteller der Templates hat. Bzw. man schafft diese erst gar nicht. Ein ziemlicher Sicherheitsaspekt finde ich.
Außerdem kann jemand nicht versehentlich ein ganzes Skript schreddern, weil er irgendwo die falsche php-Zeile schreibt.

Wenn du deine Anwendung nur selbst verwenden willst ist das eine andere Sache, aber meist ist das ja nicht so.

Rebel4s Rebel4s am 14.07.07 11:39

OK das überzeugt mich.
Ich will dann die Template-Tags per Reguläre Ausdrücke rausfiltern.
Doch wie geh ich am besten das Template durch? Zeile für Zeile? Block für Block? Oder einfach alles auf einmal?

Snake am 14.07.07 12:14

das wichtigste ist: cachen!
templates die jedes mal neu berechnet werden müssen sind nichts wert

Rebel4s Rebel4s am 14.07.07 12:23

Quote
Original von Snake
das wichtigste ist: cachen!
templates die jedes mal neu berechnet werden müssen sind nichts wert


Das ist richtig. Ich glaube ich setz mich mal nachher ran und probier mal was hinzubekommen.

Dustwolf Dustwolf am 14.07.07 13:33

Da ich derzeit auch darüber nachdenke mein Templatesystem neu zu gestalten: Gibt es zum Cachen nen Tutorial?

Weil nen funktionierendes Templatesystem bekomme ich hin, und Cachen ist mir auch klar. Aber so die Detailfragen sind mir noch verschlossen geblieben (im technischen Ablauf).

hoffie hoffie am 14.07.07 14:15

Quote
Original von Johannes
Warum sollte man in Templates, die man verwendet um HTML von PHP zu trennen, trotzdem PHP verwenden? Wäre inkonsequent.

Warum sollte man HTML von PHP trennen wollen? Das ist so ein weit verbreiteter Unsinn... Man trennt Applikationslogik von Ausgabelogik, nicht Sprache A von Sprache B. PHP wurde als Template-Sprache entwickelt und ist somit sehr gut für diesen Zweck geeignet. Es ist außerdem zwangsläufig die schnellste Möglichkeit das ganze zu lösen (alle Templatesysteme für PHP sind logischerweise in PHP geschrieben -- dh. Geschwindigkeit hängt von PHP selbst ab PLUS die Geschwindigkeit der Engine ansich).
Das einzige Pro-Argument betrifft wirklich die Einschränkung der Funktionen. Aber da sind dann die großen Template-Engines auch alle schon wieder draußen, weil man da wunderbarerweise PHP einbetten kann...

mab mab am 14.07.07 14:22

hi Rebel4s,

momentan setze ich mich "zufällig" intensiv mit diesem thema auseinander. ich sehe das ganze so:

Quote
Warum sollte man in Templates, die man verwendet um HTML von PHP zu trennen, trotzdem PHP verwenden? Wäre inkonsequent.


falsch, das ist definitiv nicht inkonsequent. das reicht schon, wenn du dir mal ein webframework wie symfony anschaust. dort ist genauso php in den templates positioniert. ursprünglich wurde php für genau diese aufgabe geschaffen, nämlich business logik in C code von präsentations logik zu trennen.
eigentlich haben template engines die aufgabe html und code dynamisch zu verbinden bei php ist das ganze ein bisschen anders, denn php ist ja schon eine in html eingebettet scriptsprache. entwickler von template engines denken jetzt, man müsse mit aller gewalt php von html trennen und führen dann eine eigene template sprache ein. damit wird der wartungsaufwand nicht unbedingt geringer.. kommt drauf an wie sauber bzw. unsauber programmiert wird. :) im grunde geht es aber um einen ganz anderen aspekt, nämlich um die aufteilung der anwendung in business logik und präsentations logik bzw. in MVC. anwendung dürfen oder sollen PHP in allen ebenen verwenden, nur der zweck für den die sprache eingesetzt wird, unterscheidet sich. bevor man sich an die entwicklung einer eigenen engine macht sollte man das erst mal verstanden haben.

jetzt zur frage, ob template engines php als template sprache verwenden sollten oder nicht:
die architektur einer anwendung sollte sich grundsätzlich am MVC prinzip orientieren. damit verbunden ist auch die unterteilung in business logik und präsentations logik. unter präsentations logik versteht man logik die zum aufbereiten der templates benötigt wird, also im grunde die verwendung einer template sprache. um den anforderungen gerecht zu werden, sollte nur dort präsentations logik im template eingesetzt werden, wo es sinn macht. (strukturen, schleifen und höchstens ein paar view helper) smarty macht jetzt nichts anderes als einen pseudo syntax einzuführen. damit habe ich zwar tolle möglichkeiten, aber natives php kann das ohnehin schon. (aktivier mal die short tags in der php.ini ... dann unterscheidet sich smarty äußerlich gar nicht so von php ;) )

hier noch ein paar punkte, die dich vielleicht überzeugen bzw. davon abhalten keine "tolle" template sprache zu erfinden:

1) du musst mindestens eine ausgeklügelte cache technik einbauen, damit der overhead aufgrund der template sprache kompensiert wird. ansonsten wirst du nicht glücklich. smarty ist schnell, aber das liegt an der kompilierung der templates, nicht nur am cashing. savant ist aber auch schnell.. ohne caching, wenn ich micht nicht täusche.

2) je nach projekt umfang tauchen fehler im template auf, egal ob php als template sprache oder sonst was. php lässt sich debuggen, deine template sprache nicht. höchstens du baust dafür auch noch einen speziellen debugger (viel spaß :) )

3) noch zum sicherheitsaspekt: mit einer eigenen template sprache tauchen genau so sicherheitslöcher auf, wie wenn du php verwendest. das hängt eindeutig vom programmierstil ab, also vom know how der template designer.

engines wie smarty konzentrieren sich zu stark auf das V in MVC. sowas wie einen controller gibt es dort nicht. ich will smarty damit nicht runter machen, es liegt letztendlich an den programmieren wie gut bzw. schlecht ihre anwendung wird.

viele grüße,
mab

P.S.:
http://bastian-frank.de/front_content.php?idart=47
http://de.wikipedia.org/wiki/Diskussion:Template_Engine

Rebel4s Rebel4s am 14.07.07 14:58

WIe kann man eigentlich schnell prüfen ob eine Datei bereits gecached ist?
Bzw. wenn man als Cache html Dateien erstellt, wie kann man prüfen, ob die Dateien aktuell sind?

mab mab am 14.07.07 15:17

kannst ja in der caching class eine gültige zeit einstellen und dann die letzte änderung mit filetime herausfinden und die differenz berechnen.

Dustwolf Dustwolf am 15.07.07 18:04

Hat keiner nen brauchbaren Artikel zum Thema Template-Cache? :D

Johannes am 15.07.07 20:23

@mab: natürlich geht es vorrangig um die Trennung von Ausgabe und der dahintersteckenden Logik. Ich finde es nur sehr praktisch, wenn man dann einen Schritt weiter geht und dann jedem, der HTML kann und vielleicht auch weiß, wie eine Schleife( If-Else-for-while-foreach) funktioniert und schonmal von Variablen gehört hat auch ermöglichen kann selbst Templates zu erstellen ohne PHP zu verstehen oder sich damit auseinandersetzen zu müssen.
Wenn man dann noch nen Cache einbauen kann hat das meiner Meinung nach ne Menge vorteile das Gesamtkonzept.
Das jeder Code, der nicht zwingend nötig ist auch immer eine zusätzliche potenzielle Fehlerquelle ist, ist ja sowieso immer so. Das lässt sich kaum umgehen.

mab mab am 15.07.07 21:02

klar, seh ich auch so. aber wenn man als template designer schon weiß was eine variable oder schleife ist, dann geht das auch einfach mit php.

das mit den short tags weiß auch nicht jeder:

variablen

<?php if ($result['mode']=='drin'): ?>

Du bist eingeloggt

<?php endif; ?>


schleifen


<?php foreach ($block as $value): ?>

<p><?=$value?></p>

<?php endforeach; ?>



damit wollt ich nur sagen, dass man vorher erst mal überlegen soll, wie viel sinn eine eigene template sprache macht... darum gings eigentlich.
aber das ist letzendlich alles geschmackssache und man kann sich drüber streiten ;)

CIX88 am 16.07.07 07:17

Als Einsteigervariante:
http://www.developers-guide.net/forums/684,php-ein-eigenes-templatesystem-schreiben

Und zum Thema Cachen:

Cachen ist ja nichts anders als die Datei (das Ausgabeformat) auf dem Server speichern, und dieses dann auszugeben.
Hier muss dann die letzte Änderung der Dateien erfasst werden (File-Funktionen), damit geänderte PHP-Dateien und Templates aktuell ausgegeben werden.

Templates macht erst Sinn, wenn im PHP-Dateien kein HTML, und in HTML kein PHP-Kram vorhaben ist, wenn mehrere Leute an einen Projekt arbeiten, oder wenn mehrere Sprachen benutzt werden.

Irgendwelche Fetzen wie
<?php if ($result['mode']=='drin'): ?>
Du bist eingeloggt
<?php endif; ?>

sind Blödsinn, und haben nichts mit Templates zu tun.
Templates sind Vorlagen, Schablonen wo Werte mittels PHP dann erstetzt bzw. ausgetauscht werden, siehe dazu Beispiellink oben ^^^

mab mab am 16.07.07 09:20

wie gesagt, man kann sich drüber streiten :)

Quote

Templates sind Vorlagen, Schablonen wo Werte mittels PHP dann erstetzt bzw. ausgetauscht werden


klar, was spricht gegen $var->method();

Quote

Templates macht erst Sinn, wenn im PHP-Dateien kein HTML, und in HTML kein PHP-Kram vorhaben ist


mit diesem argument kannst du mich überhaupt nicht überzeugen. das halte ich nämlich für totalen schwachsinn. php lässt sich als template sprache wunderbar einsetzen, hat also überhaupt nichts mit der sprache zu tun!!!! das ist wohl das allgemeine missverständnis, das jedes mal bei einer solchen diskussion auftritt.

CIX88 am 16.07.07 11:14

Hmmm, überzeugen muss ich gar nichts, arbeite seit Jahren mit Templates und weis wovon ich rede :-)

Wer einmal die Vorzüge von Templates erkannt hat, weis dass und wird dann nur noch mit Templates arbeiten.
Wenn man allerdings PHP-Code mit HTML-Kram in einen Topf haut und umrührt, brauch kein Template.
Dann kann man weiter sein HTML in die PHP-Dateien reinhacken und damit unnötige Zeit und Aufwand verschwenden.

Vielleicht müsste man mal etwas trennen.
Reden wir von "Freizeit 0-8-15 Templates" oder richten Templates ?

Rebel4s Rebel4s am 16.07.07 11:27

Quote
Original von CIX88
Reden wir von "Freizeit 0-8-15 Templates" oder richten Templates ?


Wie unterscheiden sich denn die beiden?

CIX88 am 16.07.07 11:35

Von Aufwand her dieses zu programmieren, Performace, Möglichkeiten und sauber programmiert (Klasse, Object etc..).
Die 0-8-15 Variante sind dann Geschichten mit unendlich vielen str_replace()-Pfeffer :-)

Kevz am 16.07.07 12:04

Dafür gibt es ja REGEX'e

mab mab am 16.07.07 14:44

Quote
Wenn man allerdings PHP-Code mit HTML-Kram in einen Topf haut und umrührt, brauch kein Template.


autsch... wer spricht den von umrühren. warum sollte ich php nicht als template sprache nutzen. das wird doch in anderen programmiersprachen z.B. ruby bzw, mit eRuby genaus so gemacht. vielleicht hab ich mich nicht klar ausgedrückt: es kommt darauf an, wofür die sprache genutzt wird, es geht nicht darum irgendwas mit HTML in einer datei zu vermischen. :rolleyes:

Quote
arbeite seit Jahren mit Templates und weis wovon ich rede :


toll und jetzt? ich denk da bist du nicht der einzige in diesem forum. *rofl*

CIX88 am 16.07.07 15:25

Quote
ich denk da bist du nicht der einzige in diesem forum. *rofl*

Will damit nur zum Ausdruck bringen, dass mir Templatessysteme sehr vertraut sind, weil ich damit Tag für Tag arbeite, und teilweise das "rumgeier" darüber nicht verstehen kann.

Johannes am 16.07.07 18:32

Naja. Aber es macht trotzdem genau 0.00 Meter Sinn, wenn man eine kleine Seite erstellt bei der man eine Templatesprache, Cache usw hat. Manchmal geht es auch schneller ohne den ganzen Schnickschnack. Das muss man denk ich auf jeden Fall abwägen.

Ein paar mal <?=$test?> und das Ganze in eine externe Datei gelagert gegen ein paar mal <var:test> und 200KB-Template-Klasse - das macht überhaupt keinen Sinn, auch wenn man natürlich viel mehr Möglichkeiten dadurch hat - oder auch nicht :)

CIX88 am 16.07.07 18:59

Da stimme ich voll und ganz zu.
Und wer dennoch damit arbeiten möchte, kann ja erstmal mit kleinen Brötchen anfangen (dazu der Link auf der 1.Seite von diesem Thread).

Praktisch sind Templates aber auch, wenn sich Content ständig ändert, oder dynamisch aus DB erzeugt wird, oder wenn die Seiten Mehrsprachig angelegt werden sollen.
Foren, Blogs, Bildgalerien sind schon ohne Templates nicht denkbar.

Und nicht zu vergessen das Thema Zeitaufwand und Pflege einer Website.
Hier sind Websites mit Templates (und vielleicht CMS) pflegeleichter als ein Gemisch von PHP-Dateien mit echo oder print Ausgaben.
Irgendwann ist das gejammer groß, wenn man die Seiten updaten oder verbessern möchte.

Aber ok, muss jeder selber wissen :rolleyes:

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt