Portal > Foren > PHP > PHP-Programmierung > Templates - Was sie bieten sollten!?
Antwort
 
Themen-Optionen
Alt 26.05.2006, 09:33 Nach oben    #1
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
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 gerade online  
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
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
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 gerade online  
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
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
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
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
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 gerade online  
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
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
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
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
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
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
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 gerade online  
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
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
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
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
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 gerade online  
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
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
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
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
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
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
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 gerade online  
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
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
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
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
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
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

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
MrNiceGuy ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.05.2006, 00:43 Nach oben    #20
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Da bin ich einer anderer Meinung.

Es macht für mich keinen großen Unterschied ob ich jetzt
PHP-Code:
<a href="${VARIABLE}">${VARIABLE}</a
oder
PHP-Code:
<a href="<?php echo $varibale ?>"><?php echo $variable ?></a>
verwende. Für mich sind beide Beispiele Templates. Und wenn ich eine kontrollstruktur in ein Template habe die unegfär so ausieht:
PHP-Code:
<?php if ($user->isAuthenticated()) : ?>
Hallo <?php echo $user->getUsername() ?>
<?php 
else : ?>
Hallo Gast
<?php endif ?>
finde ich das da keine große logig dahintersteckt. Wenn man das jetzt in der "php ebene" verabeiten müsste, würde das ungefär so ausehen.
PHP-Code:
${GREETINGS
PHP-Code:
if ($user->isAuthenticated()) {
    
$tpl->assing("GREETINGS""Hallo " $user->getUsername());
} else {
    
$tpl->assing("GREETINGS""Hallo Gast");

jetzt nehmen wir mal an, aus "Hallo" soll "Hi" werden und der Benutzername soll dann in einen span-Tag liegen. Wer muss sich drum kümmern? Also hat man praktisch genau das gegenteil ereicht. Man hat das Design in seine "PHP-Logig" eingebaut. Diesen Beispiel ist zwar trivial, aber zeigt das dieser Lösungsweg auch seine Macken hat.
__________________
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
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ä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


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:56 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44