![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
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 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
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 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Ich finde, dass eine Template-Engine auch die Fähigkeit haben sollte Templates zu cachen! [Offtopic] Zitat:
[/Ofttopic] | |
| | |
| | Nach oben #7 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
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 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
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 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
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 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
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: 279
|
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 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
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 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| 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 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
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 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
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 | |
| Dejan Spasic Registriert seit: 05.01.2006 Ort: Düsseldorf
Beiträge: 169
| Zitat:
| |
| | |
| | Nach oben #18 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
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 |
| | |
| | Nach oben #19 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
Betrachten wir jetzt mal nicht die Seite des Webdesigners, sondern die des Coders: Wenn ich sehe, dass eine Webseite einen optischen Makel hat, suche ich im Template, hat sie einen inhaltlichen Fehler, suche ich in der Datenbank, aber hat sie einen programmiertechnischen Bug, suche ich im Code. Wenn jetzt aber Kontrollstrukturen in den Templates sing, wird mir jegliche Möglichkeit genommen auf Anhieb bestimmen zu können, wo der Fehler genau liegt, denn es könnte eine Schwachstelle sein, die im Code liegt ODER im Template. Ich muss also gegebenenfalls an 2 Stellen nachschauen. Außerdem wirkt der Code trotz der ansich erstmal übersichtlicheren Art und Weise letztlich unübersichtlicher, als Code-Misch-Masch PHP-HTML direkt, da ich in 2 Dateien das nachschauen muss, wass ich bei einem Nicht-Template-Engine-System nur in einer Datei habe. Ergo: Der Sinn und Zweck von Templates (die Trennung von PHP / HTML) geht endgültig verloren. Wenn man zusätzlich auch noch in der Template-Klasse wühlen muss, um herauszufinden, was denn die Template-Engine genau anstellt mit den Funktionsaufrufen, hat man endgültig verloren...
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #20 |
| Dejan Spasic Registriert seit: 05.01.2006 Ort: Düsseldorf
Beiträge: 169
|
Da bin ich einer anderer Meinung. Es macht für mich keinen großen Unterschied ob ich jetzt PHP-Code: PHP-Code: PHP-Code: PHP-Code: PHP-Code: |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| PHP Templates (Bsp. Wordpress) | trefixxx | Anwendungsdesign / Softwarearchitektur | 13 | 11.09.2007 11:05 |
| Problem bei Verarbeitung von Templates (Eigene Klassen) | dago | PHP-Programmierung | 21 | 31.08.2006 16:02 |
| Seite auf Templates umstellen? | björn | PHP-Programmierung | 4 | 02.05.2006 21:37 |
| Vererbung bei Templates | Pain-maker | PHP-Programmierung | 6 | 28.03.2006 15:37 |
| [PHP] Ein einfaches Template-System | MrNiceGuy | Tutorials | 0 | 09.10.2005 18:30 |