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

T-REx 2.0 - Template Engine
Gehe zu Seite Zurück  1, 2
 
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: 24.01.2008, 22:56    Titel: Antworten mit Zitat

T-REx Debug-Methode berechnet sowohl den gesamten Zeitabschnitt ab der Instanzierung bis zur Ausgabe der Debug-Methode, als auch sämtliche Abschnitte zwischendrin (wie ein Aufruf einer Methode o.ä.). Mit echo kannst du das 100% nicht vergleichen, weil microtime schon bei langen Ausgaben sehr ungenau ist und oft schwankt (ist im Normalfall immer so bei einer Parser-Sprache). Bei längeren Codes aber wird er gleichmäßiger. Deshalb werde ich zur Vorstellung solcher Zeitvergleiche auch mehrere MySQL-Queries und Ausgaben mit einbauen. D.h. es gibt 3 Seiten: Einmal die phpBB-TemplateEngine-Seite, die Smarty-Seite und die T-REx-Seite. Jede gestalte ich mit der küzesten Methode eine bestimmte Aufgabe zu erfüllen, in der zugleich auch am Ende gespeichert wird, wie lange das ganze braucht, wodurch man später Mittelwerte bei häufigeren Aufrufen ermitteln kann.
Dann wird es auch mehrere Aufgaben geben (weil einige TemplateEngines auch sicher schwächere Gebiete haben). Mal sehen, was sich wie ergeben wird, aber mehr kann ich erst am WE machen. Habe heute über 1 Stunde damit verbracht das PartyVZ auf T-REx 2.2.0beta umzustellen, was nicht gerade einfach war (viel Schreibarbeit).

Die meisten Bugs sind auch behoben.. Es fehlen nur noch abrundende Funktionen und eine Doku.



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
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: 24.01.2008, 23:15    Titel: Antworten mit Zitat

thorn hat Folgendes geschrieben:
In Smarty wird ein Template aufgerufen - entsprechend den übergebenen Variablen, kann ermittelt werden, welcher Teil angezeigt wird:
Code:
{if isset($username)}Willkommen {$username}{else}Willkommen Gast{/if}

Code-Beispiel für Anzeige einer Willkommensmeldung...

Völliger Stuss für eine TEMPLATEENGINE, wie bereits erwähnt. Mit T-REx oder phpBB wird das folgendermaßen geregelt:
Code:
{%welcome%}

(bei phpBB ohne die "%").
Dann macht man in php: if(isset($username)){
/*entweder direkt der Variable einen Wert zuweisen, oder aus der Datenbank oder einer externen Date holen*/
}
else{
/* ähnliches Verfahren */
}
Templates sind DESIGN und nicht INHALT. Das ist wichtig, weil, wenn du nacher einen riesigen Begrüßungstext hast, müsstest du ihn für mehrere Layouts aus dem einen ins andere Template kopieren. php macht das doch auch ohne!


thorn hat Folgendes geschrieben:
Ebenfalls ist es möglich weitere Templates im Template zu includen:
Code:
{include file=./header.tpl}

Ging bei T-REx 1.0 und bei phpBB auch, bei T-REx 2.2.0 wird es hoffentlich das WE folgen. Das sieht dann so aus:
Code:
{%myFile%}

(wiederum: bei phpBB ohne die "%")
Nun hat man eine spezielle Methode von der Klasse aus, die dann beispielsweise so aufgerufen wird:
$template->assign_var_to_tpl('file.tpl') (nur ein Beispielname einer Methode).
Wiederum: Der Code entscheidet, wo was hingehört. Templates sind Schablonen, mit denen jongliert wird. phpBB und T-REx könnten an dieser Stelle auch in einer if(){}else{}-Anweisung verschiedene Templates einfügen!


thorn hat Folgendes geschrieben:
Weiter ist es möglich, eine Schleife einzubauen, um eine Liste entsprechend auszugeben:
Code:
{foreach key=id item=inhalt from=$array}
Nummer: {$id} - Inhalt: {$inhalt}<br>
{/foreach}

Schonwieder greift das Template auf Code zu und bleibt so total unflexibel. Was ist wenn man an dieser Stelle eine Schleife braucht, die einmal von 0 bis zur Anzahl des ersten Arrays, dann von 10 bis zur Anzahl des zweiten Arrays laufen soll? -> mit T-REx machbar:
Code:
{% myBlock %}
Nummer: {%myBlock.id%} . Inhalt: {%myBlock.content%}{% myBlock %}

for($i = 0, $num = count($array); $i <num>assign_block('myBlock');
$myBlock->assign_vars(array(
'id' => $i,
'content' => $array[$i]
));
}
for($i = 10, $num = count($array2); $i <num>assign_block('myBlock');
$myBlock->assign_vars(
'id' => $i,
'content' => $array2[$i]
));
}

Nur mal als schlechtes Beispiel Smile MyBlock ist beliebig oft, egal mit welcher Schleife (oder auch ohne) erstellbar.


thorn hat Folgendes geschrieben:
Von dem her gesehen find ich Smarty praktisch - nur passiert alles über eine Templateinitialisierung... also alles muss über ein Template aufgerufen werden.

Ich sehe nicht, was eine andere TemplateEngine nicht auch könnte, außer das einzig besondere: Smarty erzeugt php-Code, der als "Cache" dient.. eigentlich schreibt man php, html und smarty, dass zusammen zu html und php kompiliert wird..
Außerdem kann man T-REx so oft initalisieren wie man will -> braucht es aber kaum. T-REx kann mittlerweile sogar das Directory wechseln xD

thorn hat Folgendes geschrieben:
Wäre natürlich praktisch, wenn man ein Conteiner-Template machen könnte, wo mann dann die einzelnen Bereiche (Menu, Banner, Content, etc.) getrennt laden kann - wiederum Templates innerhalb eines Templates generieren, je nach Aufruf.

Verstehe ich leider nicht ganz.. wo willst du wann was getrennt laden? Innerhalb eines Templates sollte nichts geregelt werden dürfen.

thorn hat Folgendes geschrieben:
Ich hätte halt gerne aus PHP gesteuert, wann ein Template an welcher stelle ausgegeben werden soll - bei Smarty muss ich das alles im voraus Planen, da wie gesagt, alles über die Templates aufgerufen wird.

Naja, bei mir ist es natürlich auch noch so: Was als erstes mit assign_tpl() festgelegt wurde, erscheint oben, usw. Was aber noch folgen wird, werden einige Methoden, um die Templates neu anzuordnen. Aus meinen Augen zwar seltens nötig oder beinahe nicht nötig, aber für manche vielleicht einfacher? Confused

thorn hat Folgendes geschrieben:
Meine Idee:
Die Templates für den Content durchgehen und dann anschliessen noch ein weiteres Template für den Content durchgehen, getrennt vom ersten, sollen aber beide im Content angezeigt werden...
(Klingt wohl jetzt kompliziert, ich hab selber noch nicht den richtigen Lösungsweg, aber ansatzweise die Idee, wie ich es machen könnte, das aber wohl nicht mit Smarty)

Verstehe ich richtig, dass du enfach zwei Templateklassen instanzieren lassen willst?
Also ich denke doch, dass man beliebig viele Templates mit Smarty in einer php-Datei verwenden kann? In T-REx ist es zumindest so, dass er einfach nur Inhalt an Inhalt reiht, und man theoretisch beliebig viele Dateien als Templates verwenden kann (was natürlich bissel schwachsinnig ist.. 3 bis 6 pro Datei sind ausreichend).


Hoffe, ich konnte dir genügend Fragen beantworten.. Alles weitere muss auf morgen Abend warten Very Happy



lG




PS: sorry for double-post

_________________
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: 25.01.2008, 22:52    Titel: Antworten mit Zitat

PhP0Kid hat Folgendes geschrieben:
T-REx Debug-Methode berechnet sowohl den gesamten Zeitabschnitt ab der Instanzierung bis zur Ausgabe der Debug-Methode, als auch sämtliche Abschnitte zwischendrin (wie ein Aufruf einer Methode o.ä.). Mit echo kannst du das 100% nicht vergleichen, weil microtime schon bei langen Ausgaben sehr ungenau ist und oft schwankt (ist im Normalfall immer so bei einer Parser-Sprache). Bei längeren Codes aber wird er gleichmäßiger.


Ich habe mich doch nicht sooooo falsch ausgedrückt?
Ich werde es einfach mal anhand eines Beispiels zu erklären versuchen:
Code:
<?php
$mTime1 = microtime();
$mTime2 = microtime();
$mTime3 = microtime();
echo 'mTime1 = '.$mTime1.'<br>';
echo 'mTime2 = '.$mTime2.'<br>';
echo 'mTime3 = '.$mTime3.'<br>';
echo 'Diff1 (mTime2-mTime1) = '.($mTime2-$mTime1).'<br>';
echo 'Diff2 (mTime3-mTime2) = '.($mTime3-$mTime2);
?>

Ergebnis:
Code:
mTime1 = 0.56878500 1201293827
mTime2 = 0.56883200 1201293827
mTime3 = 0.56884800 1201293827
Diff1 (mTime2-mTime1) = 4.7000000000019E-5
Diff2 (mTime3-mTime2) = 1.6000000000016E-5

Die erste Zeitmessung mit microtime() ist meiner Meinung nach zu ungenau, weshalb ich die Funktion zuerst initialisiere, indem ich die Funktion einfach vor dem ersten Gebrauch ausführe.
In diesem Beispiel sind das zwar nur gerade mal 0.000031 Sekunden, aber immerhin eine Abweichung, die bei Berechnungen zu Fehlresultaten führen kann!

Zu deiner Engine, ich bin mir selbst noch nicht im klaren, wie ich mein Projekt angehen will - aber ich werde mal reinschauen - vielleicht lösen sich meine Probleme dann in... Ideen auf Very Happy
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: 25.01.2008, 22:58    Titel: Antworten mit Zitat

thorn hat Folgendes geschrieben:
Code:
$mTime1 = microtime();
$mTime2 = microtime();
$mTime3 = microtime();
echo 'mTime1 = '.$mTime1.'<br>';
echo 'mTime2 = '.$mTime2.'<br>';
echo 'mTime3 = '.$mTime3.'<br>';
echo 'Diff1 (mTime2-mTime1) = '.($mTime2-$mTime1).'<br>';
echo 'Diff2 (mTime3-mTime2) = '.($mTime3-$mTime2);

Ergebnis:
Code:
mTime1 = 0.56878500 1201293827
mTime2 = 0.56883200 1201293827
mTime3 = 0.56884800 1201293827
Diff1 (mTime2-mTime1) = 4.7000000000019E-5
Diff2 (mTime3-mTime2) = 1.6000000000016E-5


Wie ich bereits versuchte zu erklären: Dein Code ist so kurz, dass es beinahe unmöglich ist eine Zeitspanne zu messen. Diese Abweichungen sind ganz normal und genau deshalb:

Php0Kid hat Folgendes geschrieben:
Deshalb werde ich zur Vorstellung solcher Zeitvergleiche auch mehrere MySQL-Queries und Ausgaben mit einbauen.


Durch längere Codes erzeuge ich realistischere Angaben. Außerdem speichere ich jeden Aufruf, um schließlich Mittelwerte anzugeben Smile

_________________
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: 28.01.2008, 02:15    Titel: Antworten mit Zitat

Hab mir das mal angeschaut... sieht simpel und einfach aus...
Allerdings habe ich einen Punkt, der mich dazu zwingen würde, es nicht zu verwenden:
Die Ausgabe ist auf einer Zeile... ich weiss nicht "warum" das so gewollt ist:
Code:
         /*
         **  Print all caches
         */
            foreach($cache as $text){
               $text = str_replace("\r\n", "", $text);
               echo $text;
            }


Ich habe, wem das weiter oben schon aufgefallen ist, den Code (2.0.0) mal durchforstet... und bin da auf ein paar sachen gestossen, die mich etwas stören bzw. verwirren:

Templatedateien und Pfade
Warum wird bei dem initialisieren der Klasse ein $main_dir und ein $template_dir übergeben?
Angenommen, man ändert während dem ablauf, aber nach der initialisierung der Klasse $template_dir (über welchen weg auch immer) - so ist nicht mehr sichergestellt, dass die eingegeben Template-Dateien auch wirklich existieren:
Einlesen:
Code:
   public function assign_tpl($name){
      /*
      **  define file_path
      */
         $file_path = $this->template_main_dir . $this->template_dir . $name;
...
      /*
      **  save filename
      */
         $this->template_names[] = $name;

Abrufen:
Code:
   public function parse($tplname = '*'){
      if($tplname = '*'){
         /*
         **  Read all files into cach
         */
            $cache = array();
            foreach($this->template_names as $name){
               $cache[] = file_get_contents($this->template_main_dir . $this->template_dir . $name);
            }

Hier vielleicht mal ein kleiner Denkanstoss... Smile

Wie es in der neuesten Version (2.2.0) gelöst ist, hab ich nun nicht überprüft, da warte ich zuerst noch auf eine Funktionsreferenz *g*

Wünschenswert wäre allerdings die Möglichkeit, Blöcke bzw. Variablen einem Template zu zuweisen, so dass nicht alle Templatedateien, die womöglich keine zu ersetzenden Inhalte aufweisen (Layouttemplates), mit allen erdenklichen Variablen und Blöcken durchlaufen wird - denn das frisst unnötige Zeit.
Die Möglichkeit, eine gezieltes Template zu Parsen und nicht gleich alle eingegebenen Templates, finde ich eine gute Idee, jedoch auch hier wieder das Problem, dass alles durchgegangen wird, auch wenn man nur einen Platzhalter ausgeben will.

Des weiteren wäre wünschenswert ein Error-Template - wenn ein Fehler auftritt, dass ein selbst eingerichtetes Template aufgerufen wird, welches Designtechnisch zur Seite passt, sollte es Fehler geben (was aber nicht zu erwarten ist)

mfg
Thorn
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: 05.02.2008, 16:23    Titel: Antworten mit Zitat

thorn hat Folgendes geschrieben:
Hab mir das mal angeschaut... sieht simpel und einfach aus...
Allerdings habe ich einen Punkt, der mich dazu zwingen würde, es nicht zu verwenden:
Die Ausgabe ist auf einer Zeile... ich weiss nicht "warum" das so gewollt ist:
Code:
         /*
         **  Print all caches
         */
            foreach($cache as $text){
               $text = str_replace("\r\n", "", $text);
               echo $text;
            }


Ich habe, wem das weiter oben schon aufgefallen ist, den Code (2.0.0) mal durchforstet... und bin da auf ein paar sachen gestossen, die mich etwas stören bzw. verwirren:

Naja, anscheinend bist du ihn doch nicht ganz so gründlich durchgegangen. Grundsätzlich wird natürlich alles mit "echo" ausgegeben - wenn du es nicht anders willst. Du kannst es aber auch zurückgeben lassen oder eine eigene Funktion definieren (!!), die dann deine eigene Kompilierung durchführt (was dann doch nicht ganz so einfach ist, wenn man sich nicht eingearbeitet hat - aber für eine PDF-Schnittstelle z.B. sicher interessant)

thorn hat Folgendes geschrieben:
Templatedateien und Pfade
Warum wird bei dem initialisieren der Klasse ein $main_dir und ein $template_dir übergeben?
Angenommen, man ändert während dem ablauf, aber nach der initialisierung der Klasse $template_dir (über welchen weg auch immer) - so ist nicht mehr sichergestellt, dass die eingegeben Template-Dateien auch wirklich existieren:

Ich verstehe gar nicht, was du genau meinst. Wie ist nicht mehr sichergestellt, dass die Templatedateien noch existieren?
Es ist sichergestellt..
Ein Main_template_dir dient zur Ordnung. template_dir ist dann dein Templateordner. Beispiel: Du hast deine Templates unter "templates/" abgespeichert. Hat der User keinen Style eingestellt (oder kann er es gar nicht), bekommt er z.B. das Template "default/" zu sehen. Du kannst aber auch auf "Blue/", "MyDesign/" etc wechseln. Letztendlich ist es sicherlich ein Umstand, dass man noch ein main directory hat, da man alles absolut angeben kann, aber es ist zumindest eine kleine Absicherung vor Fehlern, wenn man viele Templates verwalten muss. Außerdem ist das kein Stress. Man muss es nur einmal definieren und es kann auch "./" sein Smile


thorn hat Folgendes geschrieben:
Einlesen:
Code:
   public function assign_tpl($name){
      /*
      **  define file_path
      */
         $file_path = $this->template_main_dir . $this->template_dir . $name;
...
      /*
      **  save filename
      */
         $this->template_names[] = $name;

Joa, so sieht der Code aus Smile Und .. ?^^

thorn hat Folgendes geschrieben:
Abrufen:
Code:
   public function parse($tplname = '*'){
      if($tplname = '*'){
         /*
         **  Read all files into cach
         */
            $cache = array();
            foreach($this->template_names as $name){
               $cache[] = file_get_contents($this->template_main_dir . $this->template_dir . $name);
            }

Uah.. also das ist definitiv noch eine alte Methode o.O parse() heißt seit dem release compile() (auch schon in der beta, um die es hier ging..). Mit $tplname ging es darum nur einzelne Templates zu parsen, was in 2.2.0 derzeit nur mit einer eigenen Funktion möglich ist.

thorn hat Folgendes geschrieben:
Hier vielleicht mal ein kleiner Denkanstoss... Smile

Wie es in der neuesten Version (2.2.0) gelöst ist, hab ich nun nicht überprüft, da warte ich zuerst noch auf eine Funktionsreferenz *g*

Wünschenswert wäre allerdings die Möglichkeit, Blöcke bzw. Variablen einem Template zu zuweisen, so dass nicht alle Templatedateien, die womöglich keine zu ersetzenden Inhalte aufweisen (Layouttemplates), mit allen erdenklichen Variablen und Blöcken durchlaufen wird - denn das frisst unnötige Zeit.
Die Möglichkeit, eine gezieltes Template zu Parsen und nicht gleich alle eingegebenen Templates, finde ich eine gute Idee, jedoch auch hier wieder das Problem, dass alles durchgegangen wird, auch wenn man nur einen Platzhalter ausgeben will.

Variablen und Blöcke einzelnen Templates zuzuweisen ist eine schicke Idee, die aber alles nochmals komplexer macht - muss ich mir durch den Kopf gehen lassen. Aber keine Sorge, so viel macht das nicht aus .. 0.001sekunden vielleicht Wink

thorn hat Folgendes geschrieben:
Des weiteren wäre wünschenswert ein Error-Template - wenn ein Fehler auftritt, dass ein selbst eingerichtetes Template aufgerufen wird, welches Designtechnisch zur Seite passt, sollte es Fehler geben (was aber nicht zu erwarten ist)

mfg
Thorn

Ich wollte eigentlich nicht einmal ein debugger machen (oder gar die Methode time() *würg*!). Das sind alles Ausgaben, die eigentlich nicht in eine Klasse gehören.. in einem Update wird alles auf trigger_errors() umgestellt, so dass man seine eigene Fehlerbehandlung schreiben kann ;P
Ansonsten versucht halt T-REx alles Fehler so weit wie möglich zu umgehen und per "retrun false;" meldet T-REx beinahe immer, ob die Methode erfolgreich ausgeführt wurde Smile



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
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: 06.02.2008, 11:24    Titel: Antworten mit Zitat

Das bereitet mir wirklich kopfschmerzen...
Warum verstehst du mich nicht? Versteht mich wenigstens ein anderer

Ich muss heut abend wohl mal wirklich den neuesten Code durchwühlen und sehen, ob es im neuen auch noch so ist wie in der 2.0.0...

Aber meine Fragen sind nach wie vor ungeklärt - lies doch bitte noch einmal genau durch und versuche den Sinn zu verstehen Rolling Eyes
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: 06.02.2008, 14:02    Titel: Antworten mit Zitat

Also, ich habe den neuen Code (2.2.0) mal überflogen...

PhP0Kid hat Folgendes geschrieben:
thorn hat Folgendes geschrieben:
Die Ausgabe ist auf einer Zeile... ich weiss nicht "warum" das so gewollt ist:
Code:
         /*
         **  Print all caches
         */
            foreach($cache as $text){
               $text = str_replace("\r\n", "", $text);
               echo $text;
            }


Ich habe, wem das weiter oben schon aufgefallen ist, den Code (2.0.0) mal durchforstet...

Naja, anscheinend bist du ihn doch nicht ganz so gründlich durchgegangen. Grundsätzlich wird natürlich alles mit "echo" ausgegeben - wenn du es nicht anders willst. Du kannst es aber auch zurückgeben lassen oder eine eigene Funktion definieren (!!)...


Wie ich schon schrieb, bin ich die Version 2.0.0 durchgegangen und ich habe sie gründlich durchsucht Wink
Worauf ich hinaus wollte ist, dass die gesamte Ausgabe auf einer Zeile ist. Die Zeilenumbrüche die in den Templates und im möglichen Ausgabetext gesetzt wurde, sind waren weg! str_replace("\r\n", "", $text)

PhP0Kid hat Folgendes geschrieben:
thorn hat Folgendes geschrieben:
Templatedateien und Pfade
Warum wird bei dem initialisieren der Klasse ein $main_dir und ein $template_dir übergeben?
Angenommen, man ändert während dem ablauf, aber nach der initialisierung der Klasse $template_dir (über welchen weg auch immer) - so ist nicht mehr sichergestellt, dass die eingegeben Template-Dateien auch wirklich existieren:

Ich verstehe gar nicht, was du genau meinst. Wie ist nicht mehr sichergestellt, dass die Templatedateien noch existieren?
Es ist sichergestellt..

Hier das Problem (bei 2.0.0), dass du überprüfst, ob die Datei im Ordner existiert, dann wird aber nur der Dateiname, ohne zugehörigen Pfad, speicherst und den Pfad später beim aufrufen wieder zusammen baust.

Als beispiel um mich zu verdeutlichen:
/templates/default/header.tpl
/templates/default/main.tpl
/templates/new/main.tpl

Wird jetzt bei der initialisierung der Pfad /templates sowie /default angegeben, so existieren die Dateien header.tpl und main.tpl
Ändert man nun den Templateordner von /default auf /new, fehlt die header.tpl

Aber das Problem wurde in 2.2.0 auch gelöst Smile


PhP0Kid hat Folgendes geschrieben:
thorn hat Folgendes geschrieben:
Des weiteren wäre wünschenswert ein Error-Template - wenn ein Fehler auftritt, dass ein selbst eingerichtetes Template aufgerufen wird, welches Designtechnisch zur Seite passt, sollte es Fehler geben (was aber nicht zu erwarten ist)

...Das sind alles Ausgaben, die eigentlich nicht in eine Klasse gehören.. in einem Update wird alles auf trigger_errors() umgestellt, so dass man seine eigene Fehlerbehandlung schreiben kann ;P
Ansonsten versucht halt T-REx alles Fehler so weit wie möglich zu umgehen und per "retrun false;" meldet T-REx beinahe immer, ob die Methode erfolgreich ausgeführt wurde Smile


Was heisst das nun, wenn ich eine nicht vorhandene Template-Datei einlesen will - gibt er nun eine Fehlernummer "zurück" oder eine Fehlermeldung "aus"?

mfg
Thorn
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: 06.02.2008, 14:36    Titel: Antworten mit Zitat

thorn hat Folgendes geschrieben:
Worauf ich hinaus wollte ist, dass die gesamte Ausgabe auf einer Zeile ist. Die Zeilenumbrüche die in den Templates und im möglichen Ausgabetext gesetzt wurde, sind waren weg! str_replace("\r\n", "", $text)

Soll die Ausgabe etwa über mehrere Zeilen gehen? Razz
Das str_replace diente einst dem Versuch den Quelltext gerade zu biegen. Am HTML-Code ändert er nichts. Ist nun aber ja anders.

thorn hat Folgendes geschrieben:
Hier das Problem (bei 2.0.0), dass du überprüfst, ob die Datei im Ordner existiert, dann wird aber nur der Dateiname, ohne zugehörigen Pfad, speicherst und den Pfad später beim aufrufen wieder zusammen baust.

Als beispiel um mich zu verdeutlichen:
/templates/default/header.tpl
/templates/default/main.tpl
/templates/new/main.tpl

Wird jetzt bei der initialisierung der Pfad /templates sowie /default angegeben, so existieren die Dateien header.tpl und main.tpl
Ändert man nun den Templateordner von /default auf /new, fehlt die header.tpl

Aber das Problem wurde in 2.2.0 auch gelöst Smile

Dieses Problem existierte gar nicht in 2.0.0. Ganz ehrlich, ich habe mehr von deinem Text gelesen als du von meiner TE Razz In 2.0.0 gab es nie die Möglichkeit den Templateordner zu wechseln, daher war dies nicht weiter relevant Wink
Du vermischt etwas die Methoden (bzw. Features) aus der neuen und der alten Version.


thorn hat Folgendes geschrieben:
Was heisst das nun, wenn ich eine nicht vorhandene Template-Datei einlesen will - gibt er nun eine Fehlernummer "zurück" oder eine Fehlermeldung "aus"?

http://de2.php.net/trigger_error
Das kommt natürlich ganz darauf an! Ich sagte bereits: T-REx versucht so wenig Fehler(meldungen) zu verursachen wie möglich. Das heißt du bekommst im Normalfall bei einfachen Methoden ein false zurück. Dann kannst du einfach schreiben:
Code:
$check = $template->assign_var('foo', 'bar');
if(!$check){
//fehler bzw. foo wurde nicht zu bar
}

Bei schweren Fehlern (Kompilierungsfehlern, wichtige Informationen) wie z.B. bei der Initialisierung gibt er ein trigger_error, also einen selbst erzeugten Fehler aus. Diesen kann man selbstverständlich mit einer eigenen error-Funktion (http://de2.php.net/manual/de/function.set-error-handler.php) gestalten oder unterdrücken.


Sorry, wenn ich dich nicht verstehe, aber ich sehe im Moment einfach nicht das Problem +G+
Wenn du magst kann ich dir auch Fragen per ICQ (239816625) beantworten Smile


Außerdem ist die Klasse noch keinesfalls fehlerfrei. Ich habe jetzt sogar in einem anderen Forum schon Ideen für neue Funktionen bekommen.


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
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
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