![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
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:
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 -->
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). |
|
|
|
|
|
Nach oben #2 |
|
Gast
Beiträge: n/a
|
Eine Templateengine sollte folgende Funktionalität bieten.
MfG Jay |
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
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 |
|
|
|
|
|
Nach oben #5 | |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
|
Ich finde, dass eine Template-Engine auch die Fähigkeit haben sollte Templates zu cachen!
[Offtopic] Zitat:
[/Ofttopic] |
|
|
|
|
|
|
Nach oben #7 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
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 |
|
|
|
|
|
Nach oben #8 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
|
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. |
|
|
|
|
|
Nach oben #9 |
|
Mensch
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.793
|
Schau dir an wie Corvin das gemacht hat.
Ich hab Corvins Templateklasse sogar weiter vereinfacht. 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();
}
__________________
I did it my way - Senseless-Blog |
|
|
|
|
|
Nach oben #10 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
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
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 |
|
|
|
|
|
Nach oben #11 |
|
Erfahrener Benutzer
Registriert seit: 30.10.2005
Beiträge: 274
|
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)
|
|
|
|
|
|
Nach oben #12 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
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 |
|
|
|
|
|
Nach oben #13 | |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
|
Zitat:
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. |
|
|
|
|
|
|
Nach oben #14 |
|
Mensch
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.793
|
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 |
|
|
|
|
|
Nach oben #16 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 609
|
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 |
|
|
|
|
|
Nach oben #17 | |
|
Erfahrener Benutzer
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 168
|
Zitat:
|
|
|
|
|
|
|
Nach oben #18 |
|
Mensch
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.793
|
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 |
|
|
|