| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 04.02.2008, 15:24 Titel: T-REx 2.2.0 release |
|
|
T-REx 2.2.0 TemplateEngine
Es ist soweit! T-REx 2.2.0 released.
Nach einem Monat ist nun endlich die neue Version fertig.
Track: https://www.syncom.org/svn/trex/
Dokumentation: http://www.julian-stier.de/referenz.htm
Download:
Mirror Julian-Stier.de:
http://www.julian-stier.de/2008/download.php?id=1 (Ace) | 19.9KB
http://www.julian-stier.de/2008/download.php?id=2 (Tar) | 90.0KB
http://www.julian-stier.de/2008/download.php?id=3 (Zip) | 22.9KB
Mirror Syncom:
https://www.syncom.org/svn/trex/T-REx%202.2.0.zip | 22.9KB
https://www.syncom.org/svn/trex/T-REx%202.2.0.ace | 19.9KB
https://www.syncom.org/svn/trex/T-REx%202.2.0.tar | 90.0KB
Ein bischen Geschichte..
T-REx entstand, als ich in einem Projekt mit der TemplateEngine von phpBB konfrontiert wurde. Die Einfachheit dieser TemplateEngine war beeindruckend (zum Beispiel im Gegensatz zu smarty) und auch die Performance stand in Nichts nach. Jedoch war sie mir noch nicht flexibel genug und außerdem ist sie selbstverständlich geschützt. Daher entstand eine eigene TemplateEngine: T-REx 1.0. Aber schon bald war ich damit nicht zufrieden. Ich entdeckte viele Schwachstellen dieser phpBB-Methode. So entstand nach einigen Updates bereits eine beinahe grundsätzliche Umgestaltung der Funktionsweise und es entstand T-REx 2.0, deren besondere Eigenschaft es war, erst bei Aufruf der entsprechenden Methode zu kompilieren. Außerdem war es möglich Blöcke ineinander zu verschachteln. Nach und nach kamen wieder kleine Updates und schließlich kam, nach 2.1.2 der Wunsch die gesamte TemplateEngine nochmals neu (auf php5-Basis) und mit weit mehr Methoden zu schreiben. Das Ergebnis ist heute fertig geworden.
Was ist T-REx, was ist eine TemplateEngine?
Eine TemplateEngine dient dazu Dateien (Templates) zu verwalten und grundsätzlich nach Platzhaltern zu durchsuchen. TemplateEngines haben dabei sehr unterschiedliche Eigenschaften und verwalten grundsätzlich HTML-Dateien (bzw. Text).
T-REx ist eine TemplateEngine, die zur Laufzeit "kompiliert". Sie kann dabei Platzhalter ("Variablen") und Textabschnitte ("Blöcke") ersetzen, mehrere Templates zusammenführen, Templates ineinander schachteln und einiges mehr. Im Gegensatz zu anderen TemplateEngines arbeitet T-REx ohne Cache, d.h. bei jedem Aufruf wird alles neu generiert (wie php auch selber stets von Neuem geparsed wird). Jedoch zeichnet sich die TemplateEngine dadurch aus, dass sie sehr kompakt gehalten ist und nur das Nötigste vornimmt. So folgt T-REx zwei Arbeitsschritten: Konfiguration, Kompilierung. Dadurch ist es möglich bereits während der Konfiguration abzubrechen (z.B. durch eine Weiterleitung, eine Bildausgabe), ohne dass eine Textausgabe vorgenommen wurde und ohne große Performanceverluste. Erst wenn ein Befehl zur Kompilierung kommt durchsucht die TemplateEngine die einzelnen Dateien und kompiliert alles.
Was bringt T-REx besonderes mit sich?
T-REx kann wie jede andere TemplateEngine auch Platzhalter verwenden. Im Gegensatz zu vielen anderen wird aber darauf geachtet zwischen Design und Code zu unterscheiden. Das Template hat nicht zu entscheiden, welcher Inhalt an einen Platzhalter kommen soll. Der Inhalt bildet ein drittes Medium (ausgelagerte Dateien, Datenbank, ..), der durch den Controller (Code) angesprochen wird. Nur der Code entscheidet, was mit einem Platzhalter geschieht. Viele TemplateEngines haben sogenannte Schleifen in ihren Templates, die es ermöglichen einen bestimmten Text oder ein bestimmtes Muster immer wieder zu wiederholen. Oft ist es aber so, dass dabei im Template festgelegt wird, wie oft oder auf welche Weise genau das geschehen soll. T-REx hat die möglichkeit Textabschnitte beliebig oft zu durchgehen, beliebige Platzhalter darin zu ersetzen und auch Textabschnitte innerhalb von Elternelementen zu durchgehen.
Mit der neuen Version ermöglicht es T-REx außerdem eine eigene Fehlerbehandlungsfunktion oder eine eigene Kompilierungsfunktion (!) zu definieren. Somit kann man nicht nur HTML damit verarbeiten (oder wahlweise auch XML, ..), sondern auch mit geeigneten Schnittstellen PDF oder ähnliches.
Sonstiges
T-REx steht unter der GPL 3 und darf demnach von jedem erweitert, verändert und verbreitet werden, solange die Lizenz gleich und mein Name erhalten bleibt. Eine Dokumentation befindet sich noch im Aufbau und auch die Funktionsreferenz wird natürlich noch vervollständigt. Für Fragen steht meine eMail zu Verfügung: trex[at]julian-stier.de
Kritik ist erwünscht, eine Diskussion, ob nun diese oder jene TemplateEngine besser ist nur unter der Vorraussetzung, dass jedem Teilnehmer der Diskussion bewusst ist, dass viele TemplateEngines ein anderes Konzept (das stets Vor- und Nachteile hat) verwenden und man diese Konzepte an sich, die TemplateEngines aber weniger vergleichen kann.
lG
php0Kid
Julian Stier _________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009
Zuletzt bearbeitet von PhP0Kid am 07.02.2008, 18:17, insgesamt einmal bearbeitet |
|
| Nach oben |
|
 |
thewuz Erfahrener Benutzer
Anmeldedatum: 21.01.2007 Beiträge: 228 Wohnort: Nähe Wien Programmiersprachen: PHP, HTML, JAVA, JavaScript Compiler: Eclipse für JAVA
|
Verfasst am: 04.02.2008, 19:51 Titel: |
|
|
du zählst hier nur vorteile auf, mich würden mal testläufe im vergleich mit smarty und ähnlichen templates interessieren, ob deine einfach viel kann, und auch schnell ist, oder nur das erste =)
ist nicht böse gemeint, es interessiert mich mal nur |
|
| Nach oben |
|
 |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 04.02.2008, 20:52 Titel: |
|
|
Im Trac und beim Download gibt es eine example.php. Darin werden schon Zeitangaben gemacht. Richtige Tests folgen, aber so etwas zu programmieren dauert, weil dazu muss ich mich erst in smarty und andere Dinge einarbeiten und schauen, dass ich jede TE gleichermaßen gut behandle.
Zumindest bleibt meine Website bei weit unter einer Sekunde und das ist eigentlich soweit normal..
Man kann hier also nicht von Performanceeinbußen reden, sondern nur von einem kleinen gemessenen Unterschied  _________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009 |
|
| Nach oben |
|
 |
thorn Benutzer

Anmeldedatum: 23.09.2007 Beiträge: 48 Wohnort: Niederried b.K. (CH) Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB
|
|
| Nach oben |
|
 |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 07.02.2008, 18:19 Titel: |
|
|
Um wieder von der Diskussion im anderen Thread wegzukommen - hat sonst noch jemand Kritik, Wünsche, Anregungen?
Ich wäre auch über neue Ideen zu weiteren Versionen sehr erfreut. Ein CachingSystem ist bereits in Planung und soll auch 2008 noch entstehen
Hat niemand noch etwas Kritik am Code? Verwendet es wenigstens jemand?
Feedback *lechz*
lG _________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009 |
|
| Nach oben |
|
 |
Faktotum Benutzer
Anmeldedatum: 13.12.2007 Beiträge: 30 Wohnort: /home/krisi Programmiersprachen: alles mögliche, nix perfekt
|
Verfasst am: 08.02.2008, 13:22 Titel: |
|
|
hi!
Ich hab die entwicklung von TRex schon von Anfang an mitverfolgt und setze es auch in meinem (noch in der Entwicklung befindlichen) CMS ein. Die Ansätze sind echt gut, der Code ist einigermaßen verständlich und lässt sich auch sehr gut den eigenen Bedürftnissen anpassen.
Ich selbst hab' mir die Version 2.1 für mein System n bisschen angepasst und verwende es momentan für HTML-Templates _________________ Linux 4 ever !
------ |
|
| Nach oben |
|
 |
synapsis Administrator

Anmeldedatum: 15.10.2006 Beiträge: 384 Wohnort: Nahe München Programmiersprachen: C/C++, VB, (Java), php, JS, AJAX, (Python) Compiler: MS VS2005 SE
|
Verfasst am: 08.02.2008, 14:28 Titel: |
|
|
Ich bin jetzt endlich mal dazu gekommen, mir das anzuschauen
Was mir gefällt:
- Möglichkeit alternative compile-Funktion anzugeben
- simples aneinanderreihen von Templates mit assign_tpl
- Sehr sauber programmiert
- Intuitive API (bis auf ein paar kleinere mängel, siehe unten)
Was mit nicht gefällt:
- Namensgebung. Einige Funktionen sind vom Namen nicht unbedingt selbsterklärend. Meine Vorschläge für neue Namen:
- assign_tpl => apply_tpl
- var_to_tpl => include_tpl
- delete_** => remove_**
- Warum ist die Block-Klasse in einer extra-Datei und muss dann auch noch vom Benutzer eingebunden werden. Würd ich entweder in der extra-Datei lassen und in der trex**.php einbinden oder alles in eine Datei packen.
- Eine Liste mit einem Block zu erstellen benötigt einen Aufruf mehr, als unbedingt nötig. Um die Flexibilität nicht zu beeinträchtigen, aber dem Benutzer trotzdem komfort zu bieten, würd ich noch folgende Wrapper-Funktion hinzufügen:
| Code: |
function assign_block_vars($block, $vars, $parent = 0) {
$this->assign_block($block, $parent)->assign_vars($vars);
} |
Ich würd im Code Tabs anstatt Leerzeichen verwenden. Leerzeichen blähen die Datei nur unnötig auf und es ist auch nicht angenehm mit ihnen zu arbeiten.
Und noch als Tipp: vor that kommt im Englische nie ein Komma
Fazit: Saubere Template-Engine... Noch ein bischen MakeUp hier und da und sie ist perfekt  |
|
| Nach oben |
|
 |
thorn Benutzer

Anmeldedatum: 23.09.2007 Beiträge: 48 Wohnort: Niederried b.K. (CH) Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB
|
Verfasst am: 22.03.2008, 03:16 Titel: |
|
|
Hmm... ich wollte mal eben die neueste Version lokal bei mir testen...
| Zitat: |
| Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. in ...\trex2.2.0.php on line 535 |
trex2.2.0.php:535
| Code: |
| $block = new Block($blockname, &$parent); |
block.php:37-41
| Code: |
public function __construct($blockname, $parent = 0){
$this->blockname = $blockname;
$this->parent = &$parent;
} |
Mal kurz für mein Verständnis... bitte korrigiere, wenn meine Logik falsch ist:
Du übergibst beim initialisieren der Klasse die Referenz einer Variable an den Konstruktor...
Innerhalb des Konstruktors übergibst du dann an eine interne Variable die Referenz der Referenz o_O?
(Obige Fehlermeldung liesse sich vielleicht mit einer Einstellung in der php.ini beheben - aber wir wollen doch diese Engine den Leuten, die keinen Zugriff auf die php.ini haben, dennoch die Möglichkeit geben, es zu nutzen
*edit:
Ok, mein C ist ein bisschen eingerostet, aber ich denke mal, du willst der internen Variable die Referenz der aussenstehenden Variable zuweisen... irgendwie so ^^
mein Tipp:
trex2.2.0.php:531
| Code: |
| $block = new Block($blockname); |
trex2.2.0.php:535
| Code: |
| $block = new Block($blockname, $parent); |
block.php:37
| Code: |
| public function __construct($blockname, &$parent = NULL){ |
Entsprechend in Zeile 39 Abfragen, ob der zweite Parameter nicht Leer ist, bevor man die Zuweisung macht...
Hinweis: Der Gerbauch von parent mit Vorsicht geniessen - parent ist ein Schlüsselwort in der Objekt-Orientierten-Umgebung von PHP! |
|
| Nach oben |
|
 |
thorn Benutzer

Anmeldedatum: 23.09.2007 Beiträge: 48 Wohnort: Niederried b.K. (CH) Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB
|
Verfasst am: 22.03.2008, 14:02 Titel: |
|
|
Weitere Anregungen...
| Code: |
/*
** Runtime
*/
$runtime0 = microtime();
$timetemp = explode(" ",$runtime0);
$runtime0 = $timetemp[0] + $timetemp[1];
|
Wenn du deine Entwicklung auf PHP 5 basierend erstellst, dann verwende doch einfach den neuen Parameter bei microtime();
| Code: |
/*
** Runtime
*/
$runtime0 = microtime(true);
|
---
Des weiteren habe ich mal versucht, etwas zu machen... ich blicke aber noch nicht so wirklich durch...
Könntest du nicht mal ein Beispiel machen, wo eine Liste (z.B. nachfolgendes Array) ausgegeben wird?
| Code: |
$inhalt = array(
0 => array('name'=>'Hans','vorname'='Muster','alter'=>12),
1 => array('name'=>'Markus','vorname'='Dolchi','alter'=>50),
2 => array('name'=>'Abraham','vorname'='Lincoln','alter'=>55),
3 => array('name'=>'James','vorname'='Bond','alter'=>44),
4 => array('name'=>'Sepp','vorname'='Meier','alter'=>33)
); |
Wäre lieb  |
|
| Nach oben |
|
 |
PhP0Kid Profi-Benutzer
Anmeldedatum: 05.01.2007 Beiträge: 403 Wohnort: Ellwangen (nahe Aalen) Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)
|
Verfasst am: 22.03.2008, 14:13 Titel: |
|
|
Das mit Runtime ist natürlich richtig und das davor auch. Es gibt bereits eine angefangene Version 2.2.1, in der ich bereits vieles geändert habe (neue Wrapperfunktionen und so), aber da ich sowieso an 2.3 arbeite hat sich das aus meiner Sicht nicht rentiert. Es wird so etwas wie Runtime-Berechnung oder Debugging auch nicht mehr direkt geben, da muss ich mir noch was einfallen lassen.. vllt in ähnlicher Art und Weise.
| Code: |
$inhalt = array(
0 => array('name'=>'Hans','vorname'='Muster','alter'=>12),
1 => array('name'=>'Markus','vorname'='Dolchi','alter'=>50),
2 => array('name'=>'Abraham','vorname'='Lincoln','alter'=>55),
3 => array('name'=>'James','vorname'='Bond','alter'=>44),
4 => array('name'=>'Sepp','vorname'='Meier','alter'=>33)
); |
| Code: |
[u]dein_template.tpl[/u]
{% daten %}<p>Name: {%daten.name%}<br>
Vorname: {%daten.vorname%}<br>
Alter: {%daten.alter%}</p>{% daten %} |
| Code: |
foreach($inhalt as $daten){
$block = $template->assign_block('daten');
$blog->assign_vars($daten);
} |
lG _________________ PHP-Programmierer aus Leidenschaft.
_________________
http://www.Julian-Stier.de | T-REx 2.2
Aktuelles ( 5.5.08 ):
* CMS, Julian-Stier.de - September 2008
* T-REx 2.3.0 - 2. Quartal 2008
* GlobalIndustry - release 2009 |
|
| Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Anhänge in diesem Forum nicht anhängen. Du kannst Dateien in diesem Forum herunterladen.
|
|