Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   Welche Template-Klasse? (https://boardunity.de/welche-template-klasse-t823.html)

Fabchan 01.10.2003 18:48

Welche Template-Klasse?
 
Ich programmiere zurzeit eine Forensoftware (da bin ich warscheinlich nicht der Einzige hier).
Folgendes hat mich dazu gebracht:

Nehmen wir mal aktuelle Forensoftware:

- vBulletin: Sehr schön, aber das Geld habe ich leider nicht. :(, außerdem ist mein aktuelles Projekt lange nicht so groß, dass sich vB dafür lohnen würde.

- phpBB2: GEfällt mir auch, die CVS der neuen Version scheitn vielversprechend zu sein, allerdings ist es nicht allzu leicht zu erweitern, das der Code sehr kompliziert geschrieben ist, andere Foren sind da besser. Schließlich binich Bastler und verändere gerne mal selber was!

- WBB 1.2: vBulletin , naja fast, für umsonst, allerdings mit einigen Fehlern und vom Rechte-Management auch nicht so toll.

- WBB 2.x: Besser, als WBB 1.2, aber immer noch sehr stark dem vB nachempfunden, irgendwie frage ich mich, warum Woltlab von Jelsoft noch keinen Ärger ekriegt hat, viele der Übersetzungen vom englischen vB sind wörtlich.

- Invision-Board: FUnktionsüberladen und außerdem kenne ich es nur vom privaten Testen, ich habe keine Referenzen, ob es stabil läuft, oder nicht. Eventuell noch besser, als mein eigenes, aber schließlich hat man bezüglich der Funktionen un MySQL-Queries von bewährten Foren, an denen man sehen kann, wie es optimal oder zumindets gut gelöst ist.

Dann gibt esnoch weitere, die mir alle irgendwie nicht gefallen:
XMB, Tritanium Bulletin Borad (hatte ich mal!), UBB ("leicht" überteuert!), ...

------------

Bei allen diesen Foren ist ein Problem meist auf anderen Weise gelöst: Das Template-Management!

Nun (endlich) meine Frage:
Wie löse ich das am besten?

Folgendes im Voraus:
- ich will nur ungern eval()-Code verwenden, ist mir Sicherheitstechnisch nicht so ganz geheuer. Immerhin sollen die Templates in irgendeiner später Version, wenn nicht sogar schon in der ersten veränderbar sein.
Man vergisst schnell mal, eine nicht mehr benötigte Variable nach ihrem Gebrauch nicht zu zerstören.

- es soll schon jeden einzelnen Schnipsel in einer eigenen einzelnen Datei/DB-Eintrag speichern (siehe WBB, vB) und nicht wie beim phpBB 2 oder TBB 2 Dateien erzeugen, die dann "Blöcke" enthalten

Kennt jemand von euch eine geeignete Template-Klasse?

Wäre es sinnvoller, doch die eval-Funktion zu nutzen?

Akira 01.10.2003 19:08

eine template funktion ist im grunde etwas sehr einfaches.

es ist immer das selbe prinzip: ein template aus der datenbank oder einer datei laden, nach dem laden wird es bearbeitet (farben, schriftarten, eben das ganze zeug) und dann wird das ergebniss entweder gespeichert weil noch mehr templates dazukommen oder ausgegeben.

ob du eval() verwenden möchtest oder nicht bleibt dir überlassen.

hier ist mal eine sehr einfache template class:

PHP-Code:

<?
class tpl {

 function 
gettemplate($tname)
 {
  
$this->templates[$tname]=str_replace("\"","\\\"",@implode("",file('../templates/'.$tname.'.htm')));
  return 
$this->templates[$tname];
 }

 function 
makeoutput($template){
  print(
$template);
 }
}
?>

Das ist der absolute grundstock eines dateibasierenden templatesystems, als beispiel. ;)

du holst die template mit folgenden zeilen "ab":

PHP-Code:

<?
eval("\$var = \"".$tpl->gettemplate('template')."\";");
eval(
"\$tpl->makeoutput(\"".$tpl->gettemplate('template')."\");");
?>


Fabchan 01.10.2003 19:16

@Akira: Danke für die Hilfe, diese Variante kennt man ja bereits so ähnlich vom WBB, ist ja ansich auch nicht schlecht.
Hast du eigentlich ne Ahnung, wie beliebt eval()-Template so im allgemeinen sind?

Akira 01.10.2003 19:25

beliebt? ka


ob die funktion sicher ist oder nicht darum mußt du dich selber kümmern. wenn du angst hast das eval() etwas ausfüren könnte was es nicht ausführen sollte mußt du ein gutes system entwickeln das alles was du in die templates einfügst, zb. beiträge, genau durchsucht und alles was gefährlich ist killt. aber das ist kein problem, ein paar kleine funktionen und fertig ;)

dann erst erfolgt die ausgabe. eval() sollte keinerlei sicherheits probleme bieten.

exe 01.10.2003 20:06

Du solltest bei der eval() Methode beachten das viele Templates nicht unbedingt einen Vorteil haben.
Zum einen wird da ein Layout ziemlich unübersichtlich, wenn du an 200 oder mehr Templates rumfummeln musst. Zum anderen bindest du damit die Struktur des Layouts an die Struktur der Software. Wenn du nämlich an 10 verschiedenen Stellen im Code Templates einliest musst du diese Struktur im Layout beibehalten.
Ich finde da Templates wie beim phpBB sehr viel praktischer. Zum einen lässt sich die Logik des Designs schneller überschauen (weniger Layout Schnippsel pro Seite) und zum anderen ist die Struktur des Layouts bei dem Prinzip völlig unabhängig vom Programmcode, eben da das Layout am Ende des Programms komplett erstellt wird, und nicht während des Programmflusses.

Templates engines ist da ein sehr interessanter Artikel zum Thema.
IMHO lohnt sich die eval() Methode nur bei kleinen Scripts (bis ~2000 Zeilen) da man sich damit ne Menge Aufwand sparen kann. Bei grösseren Geschichten macht sich eine richtige Template Engine aber bezahlt.

Fabchan 01.10.2003 23:20

@exe: Naja, über 1000 Zeilen bin ich bisher nicht gekommen, habe auf meiner HP zum erweitern des WBB dann halt auch entsprechend dessen Template-Funktion benutzt. Aber irgendwie ergibt das ür mich keine wirklich befriedigende Lösung, eval() verschafft mit einfach keinen Überblick darüber, welche Variablen denn nun wirklich im Template vorkommen.

Wenn ich meine Forensoftware eines Tages wirklich veröffentlichen sollte (oder sie überhaupt jemals fertigstellen werde! ;) ), dann wäre es sicherlich eine bessere Wahl, alles über gecachte Templates zu machen,
vielleicht nicht ganz so, wie in dem Artikel, aber irgendwie doch schon. Ich hab mir auch überlegt, ob man nicht einfach mit eval parsen könnte, aber dieses innerhalb der Funktion aufruft. Wenn man dann im Template noch sämliche $GLOBALS und Superglobalen($_GET,$_COOKIE,...) mittels regulärem Audruck ersetzt und die Variablen, die das Template benutzt per Funktionsparameter als assoziatives Array angibt und dieses mit extract() in Variablen umwandelt, wäre es natürlich eine denkbare Lösung.

Aber natürlich bleibt für mich nun die Frage, ob ich die Templates nicht doch lieber zusammenquetschen sollte in wenige Dateien. Die Vorteile der vielen Dateien liegen auf der Hand: bestimmte Dinge, wie zum Beispiel eine Forenzeile aus der Übersicht wird beim Anzeiegn einer Kategorie oder eines Forums samt Unterforen immer wieder gebraucht, außerdem wird wirklich nur das geladen, was gebraucht wird und kein Zeichen zuviel. vielleicht sollte ich mich aus Gründen der Übersichtlichkeit auf einen Mittelweg einigen, eventuell noch in die Templates einen INCLUDE-Befehl einbinden, der innerhalb eines Blockes/einer Schleife (im Falle des Artikel über Templates innerhalb des "foreach" des ersten Beispiels).
Diese Methode verwendet -glaube ich- auch die neue Template-Engine von bald erscheinenden phpBB.

Ich bin müde, werde mir den Artikel morgen in aller Ruhe nochmal durchlesen, muss mich jetzt erstmal hinhauen, morgen schreibe ich nochmal was, bis dahin habe ich sicherlich auch einen erweiterten Lösungsansatz!

TRS 02.10.2003 01:36

Es gibt für mich nur eine wahre TemplateEngine und das ist SmartTemplate.

Habe bisher nur gute Erfahrungen damit gemacht und es unterstützt sehr viele nützliche Features. Es wirkt vielleicht auf den ersten Blick etwas überladen, aber man wird es später begrüßen.

Man kann nach belieben Varialben, Arrays und Datenbanken ausgeben, ebenfalls sind Kontrollfunktionen ( if, else etc. ) vorhanden sowie Extensions. Wer wissen will, was es genau ist einfach einen Blick auf die Webseite werfen:

http://smartphp.net/content/smarttem...out/about.html

MaMo 24.03.2004 12:01

Hallo.

Habe mal ne kurze Frage zu http://smartphp.net/content/smarttem...out/about.html.
Gibts sowas auch in Perl? Oder weiß jemand ein ähnliches Modul (HMTL::Mason kenne ich schon)?

Edit: http://search.cpan.org/~mjd/Text-Tem...xt/Template.pm scheint ganz gut zu sein =)

MfG MaMo

MrNase 24.03.2004 14:18

Off-Topic:
Ich werd mal mein Glück mit bTemplate versuchen < http://www.massassi.com/bTemplate/in...&section=intro > :)

Arno Nühm 24.03.2004 21:14

probier doch mal http://smarty.php.net :).

Frederic Schneider 24.03.2004 22:07

Hallo,
Zitat:

Zitat von Arno Nühm
probier doch mal http://smarty.php.net :).

du weisst das er eine Template Klasse für Perl und nicht PHP sucht, oder? ;)

MaMo 25.03.2004 14:43

Hi.

Jo, suche Perl, und habe dann auch etwas bei CPAN.org gefunden: Text::Template. Hatt alles was ich brauche und scheint gut zu laufen und lässt sich ohne Compilierung starten :)

MfG MaMo


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr.

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