Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Templates - Was sie bieten sollten!?
Antwort
 
Themen-Optionen
Alt 26.05.2006, 09:33   Nach oben    #1
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
Standard Templates - Was sie bieten sollten!?

Hallo!

Leider ist mir gerade aufgefallen, dass über grundsätzliche Programmierfragen irgendwie kein Forum existiert, also kommt diese für mich eigentlich recht interessante Frage einfach unter PHP-Programmierung, auch wenn Templates in nahezu allen Programmiersprachen in irgendeiner Weise genutzt werden.

Was mich schlichtweg mal interessiert, sind die Meinungen aller User zum Thema Templates und deren Funktionsumfang. So gibt es ja Leute, die der Meinung zu sein scheinen, dass in einem Template-System Schleifen und Bedingungen notwendig sind, um den (ich beziehe mich jetzt einfach mal nur auf PHP) PHP-Code klein zu halten.

Ich persönlich empfinde die Definition eines Templates eher als die, dass mittels eines Templates das Layout (HTML) vom Code (PHP) getrennt werden soll. Ergo: Für mich haben Schleifen und Bedingungen in einem Template nichts verloren, denn abgesehen von der Tatsache, dass es meiner Definition widerspricht, macht es den PHP-Code auch nicht wirklich übersichtlicher, denn man hat keine Ahnung, wie die Daten denn letztendlich verarbeitet werden, da dies vom benutzten Template abhängt. Reduziert man die Verarbeitung innerhalb des Templates auf die absoluten Basics (z.B. Variablen ersetzen), kann man innerhalb des Quellcodes immernoch erkennen, was eigentlich mit den Daten gemacht wird, bevor sie lediglich an die Template-Engine zur Ausgabe übergeben werden.

Die Funktionen, die ICH in einem Template-System billige, sind:
  • Variablen ersetzen (z.B. "{VAR:Varname}")
  • Andere Templates oder Template-Teile einfügen (z.B. "{TMPL:Templatename}")
  • Eine bei der Initialisierung des Templates bedingte SWITCH-Funktion, zur Auswahl eines Template-Teils (z.B. in einem Template für Message-Boxen ein SWITCH zwischen "Hinweis", "Fehler", "Statusmeldung", etc.)

Mir ist durchaus bewusst, dass das SWITCH hier zu Irritationen führen kann, aber ich will auch kein SWITCH im Stil von PHP erschaffen, sondern, um es etwas zu veranschaulichen z.B. so regeln:

Code:
<!-- TMPL = message {SWITCH = var_switch} -->
  <!-- TMPL = notice -->
    <div class="notice">Notiz: {VAR:text}</div>
  <!-- /TMPL = notice -->
  <!-- TMPL = error -->
    <div class="error">Fehler: {VAR:text}!</div>
  <!-- /TMPL = error -->
<!-- /TMPL = message -->
Bei der Initialisierung wird nun also eine Variable "var_switch" übergeben, die dann in diesem Beispiel "notice" oder "error" enthält und durch die dann entschieden wird, welcher Template-Teil ausgeführt wird. Es ist allerdings nur eine Möglichkeit und die Realisierung ist sicher auf vielerlei Wege machbar, aber um generell zu zeigen, dass ich halt kein SWITCH im eigentlichen Sinne meine, wollte ich das hier mal kurz darstellen

Mein Fazit:

Schleifen, Kontrollstrukturen und dergleichen, was noch mit Programmiertechnik zu tun haben, gehören weiterhin in den Quelltext, nicht aber in ein Template.

Was denkt ihr?

EDIT: Achso, eins noch: Bitte seht das jetzt nicht als Anfachung eines "Krieges" zwischen den Leuten getrennter Meinungen über Template-Engines an, sicher ist jeder von seiner oder irgendeiner anderen Template-Engine überzeugt, ich will lediglich mal die Meinung anderer Leute hören, was sie denken, was eine Template-Engine bieten soll und vielleicht eine kleine Begründung, wie ich es getan habe (warum ich finde, weshalb Kontrollstrukturen und Schleifen nicht in Templates gehören), abgeben.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll

Geändert von MrNiceGuy (26.05.2006 um 09:37 Uhr).
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 10:03   Nach oben    #2
Jay
Gast
 
Beiträge: n/a
Standard

Eine Templateengine sollte folgende Funktionalität bieten.
  1. Variablen ersetzen
  2. Arrays mit Schleifen durchlaufen - Schleifen sind zwar Programmierstrukturen, allerdings lassen sich damit Arrays ziemlich gut ausgeben
Bedingungen etc. brauche ich nicht, weil das alles wesentlich schneller und effizienter im Controller gemacht werden kann. Habe ich lediglich Variablen zu ersetzen und Ausgaben in Form von Schleifen zu wiederholen, so ist die TemplateEngine auch sehr sehr schnell.

MfG Jay
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 10:07   Nach oben    #3
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
Standard

Wie meinst du das: Ein Array mittels Schleife durchlaufen lassen? Meinst du dann hinterher eine Ausgabe wie bei print_r() oder so?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 10:16   Nach oben    #4
Jay
Gast
 
Beiträge: n/a
Standard

Nein. Ich mache das immer so:
Code:
<!-- #repeat:Arrayname -->

    <td>{$Arrayname:key1}</td>
    <td>{$Arrayname:key2}</td>
    <td>{$Arrayname:key3}</td>

<!-- #endrepeat:Arrayname -->
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 10:30   Nach oben    #5
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
Standard

Ich finde, dass eine Template-Engine auch die Fähigkeit haben sollte Templates zu cachen!

[Offtopic]
Zitat:
Zitat von MrNiceGuy
Leider ist mir gerade aufgefallen, dass über grundsätzliche Programmierfragen irgendwie kein Forum existiert
Weil dieses Forum dann recht ungenutzt wäre.
[/Ofttopic]
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 12:47   Nach oben    #6
Jay
Gast
 
Beiträge: n/a
Standard

Naja, IMHO sollte die Template Engine die Templates compilen können.
Der Cache sollte separat verwendet werden.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 13:02   Nach oben    #7
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
Standard

Ob die Template-Engine die Templates cached oder nicht ist doch vollkommen egal und an der eigentlich gewünschten Thematik vorbei, denn ob Caching oder nicht, das bezieht sich nicht auf die oben angesprochenen Funktionen der Template-Engine selbst. Das Caching ist eine Funktion im Hintergrund mit der Absicht, die Template-Engine selber schneller zu machen, verändert den Funktionsumfang einer Template-Engine nicht.

Mir geht es halt um die Funktionalität bzgl. der Syntax, was halt in meinem ersten Posting beschrieben wurde!?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 13:11   Nach oben    #8
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
Standard

Jo.

Ich hab mal 'ne Frage.
Du sagst, dass du keinerlei Schleifen im Template selbst verarbeiten lässt, sondern diese Aufgabe lieber an eine entsprechende Klasse weiterleitest.

Alles klar. Ich mache das nicht. Also ich habe neben einer switch-Abfrage noch die Möglichkeit Schleifen im Template selbst parsen zu lassen. Da ich aber deine Argumentation ganz gut finde würde ich gerne verstehen, wie du das dann realisierst.

Wenn das wiederum nicht in den Thread hier gehört, dann wein ich.

Mein Problem liegt da einfach im Mangel an Vorstellung, wie man die Schleifen aus dem Template herausholen und in einer Klasse deponieren kann.
Kurze Beschreibung wäre super ...

Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 15:31   Nach oben    #9
WarrenFaith
Mensch
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.793
Standard

Schau dir an wie Corvin das gemacht hat.
Ich hab Corvins Templateklasse sogar weiter vereinfacht.
Variablen werden ersetzt, Templates in beliebiger Tiefe verschachtelt

Sollte man wie z.b. in einem Forum viele Posts und damit identischen HTML-Code aufrufen müssen, kann man die schleife auch außerhalb des templates einbauen.
Code:
foreach(....)
{
    $Tpl->load('template.tpl');
    $Tpl->assign(...);
    $Tpl->out();
}
Reicht meines erachtens aus.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 16:48   Nach oben    #10
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
Standard

So ähnlich, wie es Warren formuliert hat habe ich es auch gelöst. Ich habe die Schleife im Code drin und rufe von da einfach mehrfach das (Teil-)Template mit unterschiedlichen Daten auf, was letztlich halt anderen HTML-Code erzeugt Aber ich will hier jetzt nicht meine Klasse erklären.

Als Beispiel ist das von Warren schon recht gut umschrieben, kommt halt auf die Programmierung drauf an, wie das Resultat letztlich aussieht.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 17:14   Nach oben    #11
ex³
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 274
Standard

Hm, man muss ja die templates auf diese Art nicht gleich outen. Statt der Out() Funktion könnte man doch etwas zum verkuppeln nehmen. Wie wäre es wenn man diese an den Browser geschickten Häppchen in einem Array speichert und es am Ende mit einer Output Funktion und implode ausgibt, ging doch auch (oder eben alls Strings behandelt und verkettet)
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 17:45   Nach oben    #12
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
Standard

Bitte back2topic, mich interessieren schließlich weniger die Funktionsweisen und Möglichkeiten der Funktion einer Template-Klasse, sondern vielmehr, was ihr denkt, wie umfangreich eben diese sein sollte im Bezug auf Data-Handling!?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 18:15   Nach oben    #13
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
Standard

Zitat:
Zitat von MrNiceGuy
Als Beispiel ist das von Warren schon recht gut umschrieben
Alles klar.

Damit könnte ich mich wohl auch anfreunden. Also mit dieser Art der Funktionalität, wobei ich dann noch nicht so ganz verstanden habe, warum deine "SWITCH"-Anweisung nicht auch in PHP realisiert wird. Oder übersehe ich da etwas?

Ich werde da mal drüber nachdenken, vielleicht die Schleifen aus der Engine, die ich derzeit verwende, herauszunehmen.
Die hier vorgestellten Argumente finde ich recht interessant und einleuchtend.

Allerdings würde ich letztlich das nehmen, was schneller läuft. Da ich diesbzgl. aber wiederum keinerlei Informationen habe ...
In diesem Fall bin ich jemand, der nicht wirklich auf eine Definition, in der Form, wie du sie dargelegt hast, besteht.

Aber interessantes Thema.

Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 19:22   Nach oben    #14
WarrenFaith
Mensch
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.793
Standard

Der Grund schlechthin für das heraushalten aller Kontrollstrukturen und Programmiertechnischen Dinge:
Externe Designer sollten nicht in deinem Quellcode rumpfuschen dürfen. Es sind Designer und keine Programmierer.
Gerade bei großprojekten wo meistens die Community noch ein paar design einbringt, wären kontrollstrukturen in templates ein fataler fehler meiner meinung nach.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 19:40   Nach oben    #16
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
Standard

Den SWITCH aus meiner Klasse kann man auch im Script lösen, das ist korrekt, nur entspricht er nicht dem SWITCH, wie man ihn aus C bzw. PHP entspricht, ich habe mir an dieser Stelle eine Ausnahme erlaubt, da ich für meine Engine je eine Template-Datei für einen Zweck schreibe (z.B. eine Datei fürs Forum, eine für Mails, eine für Messages, etc.). Letztlich nur eine Selection des Teil-Templates innerhalb der Template-Datei und nicht wirklich ein Switch, obwohl ich zugeben muss, dass eine Realisierung im Code wahrscheinlich konsequenter wäre.

Ach, mal so ganz nebenbei: Ich übergebe meine Variablen an die Klasse. Daten, die nicht übergeben wurden, können auch nicht angezeigt werden. Warum? Ganz einfach! Wenn jemand aus welchem Grund auch immer zugriff auf die Templates bekommen sollte, kann er so ganz schnell spezifische Daten auslesen oder durch Fehler in der Programmierung eventuell fehlerhaften Code einfügen, der zur Ausgabe von wichtigen Daten führt... Sollte man generell auch mal drüber nachdenken.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 21:19   Nach oben    #17
dejan_spasic
Erfahrener Benutzer
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 168
Standard

Zitat:
Zitat von WarrenFaith
Der Grund schlechthin für das heraushalten aller Kontrollstrukturen und Programmiertechnischen Dinge:
Externe Designer sollten nicht in deinem Quellcode rumpfuschen dürfen. Es sind Designer und keine Programmierer.
Gerade bei großprojekten wo meistens die Community noch ein paar design einbringt, wären kontrollstrukturen in templates ein fataler fehler meiner meinung nach.
Aber meinst du nicht das ein/e WebDesigner/in kontrollstrukturen kennen müsste? In meinen Augen muss sich ein/e WebDesigner/in mit der Materie HTML/CSS/JavaScript auskennen und damit kennt er/sie auch zwangsläufig Kontrollstrukturen.
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 23:06   Nach oben    #18
WarrenFaith
Mensch
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.793
Standard

mja da hast du recht, aber eine trennung von code und design ist meiner meinung nach sehr wichtig, da sich auch die darstellungsmöglichkeiten verändern und man sich nicht durch code stören lassen müsste.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.05.2006, 23:58   Nach oben    #19
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609