FAQ Suchen Synapsis Wiki Projekte Mitgliederliste Benutzergruppen Profil Einloggen, um private Nachrichten zu lesen Registrieren Login

T-REx 2.2.0 release

 
Neues Thema eröffnen   Neue Antwort erstellen    Syncom.org Foren-Übersicht -> Tools
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)

BeitragVerfasst am: 04.02.2008, 15:24    Titel: T-REx 2.2.0 release Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
thewuz
Erfahrener Benutzer


Anmeldedatum: 21.01.2007
Beiträge: 228
Wohnort: Nähe Wien
Programmiersprachen: PHP, HTML, JAVA, JavaScript
Compiler: Eclipse für JAVA

BeitragVerfasst am: 04.02.2008, 19:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
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)

BeitragVerfasst am: 04.02.2008, 20:52    Titel: Antworten mit Zitat

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 Mr. Green

_________________
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
Benutzer-Profile anzeigen Private Nachricht senden
thorn
Benutzer


Anmeldedatum: 23.09.2007
Beiträge: 48
Wohnort: Niederried b.K. (CH)
Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB

BeitragVerfasst am: 05.02.2008, 13:46    Titel: Antworten mit Zitat

Gibt es dazu noch ein Statement von deiner Seite?
http://syncom.org/viewtopic.php?p=2067#2067

Wurde das in 2.2.0 verändert oder ist das immer noch gleich? Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
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)

BeitragVerfasst am: 07.02.2008, 18:19    Titel: Antworten mit Zitat

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 Mr. Green


Hat niemand noch etwas Kritik am Code? Verwendet es wenigstens jemand? Razz
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
Benutzer-Profile anzeigen Private Nachricht senden
Faktotum
Benutzer


Anmeldedatum: 13.12.2007
Beiträge: 30
Wohnort: /home/krisi
Programmiersprachen: alles mögliche, nix perfekt

BeitragVerfasst am: 08.02.2008, 13:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
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

BeitragVerfasst am: 08.02.2008, 14:28    Titel: Antworten mit Zitat

Ich bin jetzt endlich mal dazu gekommen, mir das anzuschauen Smile
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 Wink
Fazit: Saubere Template-Engine... Noch ein bischen MakeUp hier und da und sie ist perfekt Mr. Green
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
thorn
Benutzer


Anmeldedatum: 23.09.2007
Beiträge: 48
Wohnort: Niederried b.K. (CH)
Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB

BeitragVerfasst am: 22.03.2008, 03:16    Titel: Antworten mit Zitat

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 Wink

*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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
thorn
Benutzer


Anmeldedatum: 23.09.2007
Beiträge: 48
Wohnort: Niederried b.K. (CH)
Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB

BeitragVerfasst am: 22.03.2008, 14:02    Titel: Antworten mit Zitat

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 Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
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)

BeitragVerfasst am: 22.03.2008, 14:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Syncom.org Foren-Übersicht -> Tools Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.


Powered by php B. B. © 2001, 2005 php B. B. Group
Template xabbBlue für php B. B. Foren - created by php b. b. styles
Modified by synapsis
Protected by CTracker