Templatesystem
Chris
- programmiertechnik
Hallo Experten,
ich sitze hier gerade an meinem PC und suche seit 4 Stunden das Web ab, um eine Erklärung zu finden, warum Templatesysteme generell mit einem Parser arbeiten.
Es geht doch im Kern darum, im Entwicklungsstadium eines Internet-Projektes, die PHP oder ähnlichen Script-Anteile vom Design der Seite abzutrennen. Also z.B. bei dynamischen Seiten die Trennung von Gestaltung und Inhalt.
Das soll ja dann die Arbeit für die Gestalter und Coder erleichtern. Dafür wird ja meistens ein Template interner Parser eingesetzt, die Frage ist nur warum ?
Gibt es auch Templatesysteme ohne Parser, die vielleicht nur mit definierten Variablen arbeiten und dann vereinfacht ungefähr so aussehen:
Die Datei für den Gestalter:
home.php
<?
session_start();
include("content_home.php"); // oder
?>
< css information >
<html>
<body>
<h1><? echo $titel ?></h1>
<hr>
<div class="text"><? echo $text ?>
</div>
</body>
</html>
Die Datei für den Coder:
content_home.php
<?
// Content für die home.php Seite
$titel = "Willkommen";
$text = "Auf unserer Homepage";
//Oder DB-Zugriff usw.
?>
es gibt dann für jede Aufgerufene Seite eine Zusatzseite, wo der Programmierer alle seine Sachen erledigen kann, die Ausgabe erfolgt dann über einen array oder so.
Würde das die Sache nicht genauso erledigen/vereinfachen oder liege ich da völlig falsch?
Ist ja auch schon spät !
Es muss doch ein Argument für den Parser geben.
Für Antworten wäre ich sehr dankbar
Chris
Hi,
ich sitze hier gerade an meinem PC und suche seit 4 Stunden das Web ab, um eine Erklärung zu finden, warum Templatesysteme generell mit einem Parser arbeiten.
kleine Rueckfrage: Ein "Template-System" muss doch mit Vorlagen arbeiten, die "ausgefuellt" werden - und das, so koennte ich mir vorstellen, macht der Parser?
Gruss,
Lude
Hallo,
Der Parser schaut sich eine Template-Datei genau an (Zeilenweise) und ersetzt (z.B. preg_replace)dann entsprechende Platzhalter z.B.{TEXTBLOCK}.
Ich frage mich nur warum das gerade so gelöst wird und nicht anders, ich denke mir manchmal, dass es auch einfacher gehen muss, also die Trennung von Funnktionscode und Gestaltungscode. Ungefähr so wie in meinem Beispiel mit den vordefinierten und included Variablen.
Viele Grüße
Chris
Hi,
Der Parser schaut sich eine Template-Datei genau an (Zeilenweise) und ersetzt (z.B. preg_replace)dann entsprechende Platzhalter z.B.{TEXTBLOCK}.
Ich frage mich nur warum das gerade so gelöst wird und nicht anders, ich denke mir manchmal, dass es auch einfacher gehen muss, also die Trennung von Funnktionscode und Gestaltungscode. Ungefähr so wie in meinem Beispiel mit den vordefinierten und included Variablen.
Du stellst die richtigen Fragen (nach Einfachheit), aber Deine Antworten sind nicht einfach. ;-)
Bei einem "Templatesystem" scheint es mir keine Trennung im von Dir genannten Sinne geben zu _koennen_. (Aber ich bin nicht ganz sicher Dich verstanden zu haben.)
Gruss,
Lude
endlich mal ein interessanter beitrag.
also: der parser ist selbst in z.b. php gebastelt, und hat die aufgabe, die eingestreuten template-tags in gültige (php) anweisungen umzuwandeln. das ist die arbeitsweise der gängigen templates. daher muß der parser laufen. ich selbst halte nichts von templates, da diese nur zusätzliche cpu zeit verbraten, und zudem in templates selbst oft programmlogik und darstellung gemixt wird.
ich empfehle folgende vorgehensweise:
1. in der index.php stehen 2 requires: z.b. seite.php und seite.htm
2. in der seite.php befindet sich die komplette applikationslogik
3. in der seite.htm befindet sich die darstellungslogik
am besten erzeugt die seite.php ein objekt der klasse seite, welche die daten und methoden beinhaltet. auf diese kann dann in seite.htm bezug genommen werden.
vom browser:
Eingabe => (Array)
[Seite] => Liste
[Aktion] => suchen
[Sortierung] => Array
[Bezeichnung] => DESC
[Preis] => ASC
in index.php:
require 'seite.php
Ausgabe = new Liste(Eingabe)
require 'seite.htm'
in seite.php:
class Liste
var Tabelle = array()
function Liste(Eingabe)
this->Tabelle = Zeile::erstelleListe(Eingabe[Sortierung])
class Artikel
var Bezeichnung
var Preis
function Artikel(ID)
this->Bezeichnung = Radio
this->Preis = 123
function erstelleListe(Sortierung)
Tabelle = array()
Tabelle[] = new Artikel(Radio)
Tabelle[] = new Artikel(Motor)
return Tabelle
function zeigeWert(Attribut)
echo this->Attribut
ausgabeobjekt:
Ausgabe => Liste(Object)
[SeitenAnzahl] => 5
[Sortierung] => Array
[Bezeichnung] => DESC
[Preis] => ASC
[Tabelle] => (Array)
[0] => Zeile(Object)
[Bezeichnung] => Radio
[Preis] => 123
[1] => Zeile(Object)
[Bezeichnung] => Motor
[Preis] => 3456
seite.htm:
foreach (Ausgabe->Tabelle as Zeile)
<TD>Zeile->zeigeWert(Bezeichnung)</TD>
<TD>Zeile->zeigeWert(Preis)</TD>
endforeach
Hallo noname und Danke für Deine Antwort,
endlich mal ein interessanter beitrag.
also: der parser ist selbst in z.b. php gebastelt, und hat die aufgabe, die eingestreuten template-tags in gültige (php) anweisungen umzuwandeln. das ist die arbeitsweise der gängigen templates. daher muß der parser laufen. ich selbst halte nichts von templates, da diese nur zusätzliche cpu zeit verbraten, und zudem in templates selbst oft programmlogik und darstellung gemixt wird.
»»
Das ist genau der Punkt der mich immer so wurmt. Alle die ich so kenne, also PHP Coder, schwören auf diese besagten Templates mit Parser. Ich habe immer nur das Gefühl das keiner so recht weiß wo die Vorteile bzw- Nachteile liegen! Und die wollte ich mal genauer ergründen.
ich empfehle folgende vorgehensweise:
in der index.php stehen 2 requires: z.b. seite.php und seite.htm
in der seite.php befindet sich die komplette applikationslogik
in der seite.htm befindet sich die darstellungslogik
So hatte ich es mir ja auch gedacht. Ist das jetzt ein anerkannter Weg den du da gehst und gibt es konkrete Beispiele dafür. Ich meine nur im Sinne der Akzeptanz für diese Lösung, die ich, wie schon gesagt, bevorzuge. Mir sind die Vor- und Nachteile dieser Variante aber nicht ganz bewußt und ich möchte Argumente für so eine Lösung sammeln.
Welche Erfahrungen hast du oder die Anderen bis jetzt gesammelt?
Viele Grüße
Chris
hierbei handelt es sich um meine persönliche vorgehensweise, welche ich bisher woanders nicht gesehen habe.
ich bevorzuge die arbeitsweise mit DOMs. an dem objekt ausgabe kannst du eine DOM-ähnliche struktur erkennen. zudem leite ich ausgabe von meiner basisklasse objekt ab, welche noch diverse andere methoden hat. z.b. __get und __set, welche später in php5 benutzt werden können.
weiterhin habe ich noch xml methoden in der basisklasse, so daß ich von der struktur 1-2-3 einen xml-datenstrom habe. hier kann ich dann auch mit xslt darstellen.
leider bin ich noch nicht dazu gekommen, eine benutzerfreundliche doku zu erstellen. diese werde ich dann im internet bereitstellen.
Das klingt alles recht spannend. Viel Erfolg bei der Weiterentwicklung und mach mal meldung wenn du die Doku fetig gestellt hast, würde mich wirklich interessieren.
Viele Grüße
Chris