Zur Boardunity Forenstartseite

Zurück   Boardunity & Video Forum » Technik » Programmierung und Datenbanken

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #26  
Alt 31.05.2004, 00:34
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Zitat:
Zitat von Reimer
Aber auch ich habe ein paar Probleme damit hatte und ich deswegen auf ebenso auf die eval-Variante umgestiegen bin.
Die Grammatik ist gut

Zitat:
Zitat von codethief
Mir ist eben noch eine Frage gekommen:
Funktionieren diese REGEXP eigentlich auch noch, wenn man {if} verschachtelt, mehrere {if}'s hintereinander oder sogar beides im Template hat?
Mehrere if-Konstrukte hintereinander sind kein Problem, Rekursion unterstützt dieser reguläre Ausdruck nicht.
Man kann zwar mit regulären Ausdrücken auch rekursive Muster finden, allerdings ist das dann ein bisschen aufwändiger.

  #27  
Alt 31.05.2004, 09:14
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Ich hab ja schon unzählige TemplateEngines geschrieben. Einige davon auch mit Template-Scripting.
Und ich muss ehrlich sagen, dass meine mir alles bieten was ich brauche, dabei aber (der Parser) nicht auf über 100 Zeilen kommt.
@Reimer: Und da ist eine Funktion zum Formatieren eines Timestamps, bzw. auslesen der aktuellen Tageszeit mit drin.
Cache usw. ebenfalls, If-Abfragen und der Aufruf von PHP-Funktionen (nebenher noch Variablen und das einbinden von Dateien).
Also im Prinzip ne ganze Menge in ziehmlich wenig Zeilen.

Aber für meinen Geschmack ist auch das schon wieder zuviel.

Was Schleifen in Templates betrifft... generell nicht schlecht, aber ich mag allzu große Templates auch nicht.
Ich bin momentan gezwungen mit Smarty zu arbeiten (als "Designer" - nicht als Programmierer) und ich finde es einfach schrecklich.
Leider hat der Autor des Programmes vergessen, dass Smarty Kommentare anbietet, wodurch der Smarty-Code für mich wirklich schwerer durchzuarbeiten ist, als es der Code vom wBB jemals war (nimm's nicht persönlich, frederic).

Zitat:
wahrscheinlich bessere Performence, da man sicherlich so viele Funktionen wie bei Smarty oder so garantiert nicht einbauen wird
Nö. Das ist ja einer der Vorteile von Smarty. Es gibt quasi keinen Performance-Nachteil, da die Templates einfach cached werden (wie es der PHP Interpreter auch mit deinen PHP-Dateien macht).
Die Templates werden in reines PHP/HTML umgewandelt. Mehr nicht.

Zitat:
Man kann zwar mit regulären Ausdrücken auch rekursive Muster finden
Direkt mit dem RegEx? Das ist mir noch nie geglückt. Ich jage meist die Funktion zum ersetzen von If-Abfragen nochmal über die Teile der If-Abfragen.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #28  
Alt 31.05.2004, 12:01
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
@exe: Sicher? Schließlich sind Regexp von Geburt aus greedy (gierig) wodurch beispielsweise folgendes passieren würde:

Code:
{if $var == "meineVar"}
hier kommt irgendwas hin
{/if}

{if $name == "meinName"}
hier auch
{/if}
Der Regexp "schnappt" sich das {if $var == "meineVar"} aus der 1. Zeile und das {/if} aus der letzten, wodurch er, wenn $var == "meineVar" true ergibt, das Ganze:
Code:
{if $var == "meineVar"}
hier kommt irgendwas hin
{/if}

{if $name == "meinName"}
hier auch
{/if}
durch

Code:
hier kommt irgendwas hin
{/if}

{if $name == "meinName"}
hier auch
ersetzen würde. Oder etwa nicht?
Wenn er nicht greedy sein soll, müsste man als Modifier U hinzufügen.


Und diese Rekursion kann man IMHO nicht nur durch einen Regexp lösen, wenn doch, hätte ich gerne ein Beispiel.


Bis dann,

codethief

  #29  
Alt 31.05.2004, 12:36
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Die RegExp sind ungreedy.

.*? = .* (mit U)

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #30  
Alt 31.05.2004, 12:44
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
Achso? Wusste ich ja noch gar nicht...
Danke, man lernt hier jeden Tag mehr.



PS: Hab mal eine Frage - ich will bei der nächsten Version meiner Forensoftware Languagevars benutzen und will nun in jedem Template, bevor es benutzt wird, die $language-Variablen durch ihren Wert ersetzen, damit ich in selbigen auch Variablen benutzen kann:

$temp = preg_replace("/\$language\[(.*)\]/eU", "\$language['\\1']", $temp);

Aber das funktioniert jetzt irgendwie nicht mehr (früher hat's damit immer geklappt).

[EDIT]: Irgendwie bin ich nicht richtig ausgeschlafen: das \ vor $language war falsch, entweder \\\ oder den String in 's fassen.



Bis dann,

codethief

  #31  
Alt 31.05.2004, 18:05
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Zitat:
Zitat von codethief
@exe: Sicher? Schließlich sind Regexp von Geburt aus greedy (gierig) wodurch beispielsweise folgendes passieren würde:
Wie TDM schon sagte macht das Fragezeichen (alternativ der U Modifier) die + und * Quantifier ungreedy.

Zitat:
Zitat von TheDragonMaster
Direkt mit dem RegEx? Das ist mir noch nie geglückt. Ich jage meist die Funktion zum ersetzen von If-Abfragen nochmal über die Teile der If-Abfragen.
Zitat:
Zitat von codethief
Und diese Rekursion kann man IMHO nicht nur durch einen Regexp lösen, wenn doch, hätte ich gerne ein Beispiel.
Die PCRE-Bibliothek in PHP unterstützt rekursive Muster, siehe http://www.php.net/manual/en/pcre.pattern.syntax.php Abschnitt "Recursive patterns".
Direkt benutzt habe ich es noch nicht da man die verschachtelten if/else-Konstrukte zwar auslesen kann, man dann aber immernoch die einzelnen Anweisungen voneinander Trennen muss da man eben nur das komplette if/else-Konstrukt mit allen Verschachtelungen als ganzes auslesen kann.

  #32  
Alt 31.05.2004, 21:00
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Na ja. Da bleibe ich lieber dabei die einzelnen Zweige nochmal zu parsen.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #33  
Alt 01.06.2004, 01:08
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Zum Thema:

* http://www.massassi.com/php/articles/template_engines/
* http://www.massassi.com/bTemplate/benchmarks/

Und wenn wir schon dabei sind:

* http://www.sitepoint.com/forums/atta...achmentid=6772

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #34  
Alt 01.06.2004, 03:57
Benutzerbild von exe
exe exe ist offline
titellos
 
Registriert seit: 07.2003
Ort: München
Beiträge: 888
Interessante Links, danke
Den ersten Artikel kannte ich schon, aber die anderen beiden sind mir neu.

  #35  
Alt 01.06.2004, 08:32
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Na ja. Kannte den ersten ebenfalls. Hätte mich fast in's schwanken gebracht, damals.

Den letzten Link werde ich mir bei Zeiten nochmal genauer durchlesen.

Wenn XML von den Browsern besser supported wäre bräuchte man keine Template-Engine.
Dann würde man die Ausgaben einfach in XML machen und den Kunden die Möglichkeit geben eine XSLT- oder CSS-Datei zu modifizieren... naja... aber das scheint ja noch etwas zu dauern.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #36  
Alt 01.06.2004, 12:51
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Nein, die XML/XSLT-Lösung funktioniert bereits.

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer

Geändert von Philipp Gérard (01.06.2004 um 13:53 Uhr).
  #37  
Alt 01.06.2004, 13:15
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Ich bin zwar kein Fan davon, aber irgendwo muss man ja auch an die älteren Browser denken, oder?


Aber eigentlich hast du recht... ich könnt mal was mit XML als Ausgabe basteln.

BTW: Sicher, dass das XSS heißt?

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #38  
Alt 01.06.2004, 17:16
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
@TheDragonMaster:
Hm, ich komm irgendwie auf keine allzu sinnvolle Lösung - wie hast du das denn gelöst?

  #39  
Alt 01.06.2004, 17:49
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Ich hab momentan auch keine "Up-To-Date"-Variante mehr.
Zumindest keine getestete. "

Generell musst du aber nur nochmal den If-Parser über die Zweige der Bedingungen drüber jagen.
Das sollte schon reichen.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #40  
Alt 05.08.2004, 18:03
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 995
Übrigens scheint die REGEX für Elseanweisungen noch etwas verbugt zu sein. Die Runtime beim Output meiner Website ist mit der else-REGEX 2,8s, ohne 0,02s.

  #41  
Alt 22.08.2004, 13:43
Benutzerbild von codethief
Visionär
 
Registriert seit: 09.2003
Beiträge: 811
Hallo,
mit verschachtelten IF's hab ich's jetzt auch hinbekommen, aber sicherlich ganz anders als vermutet:
Ich habe mit strpos, substr() und substr_replace() jedem IF eine ID zugewiesen, wobei jede else bzw. /if-Anweisung die ID des letzten IF's bekommt. Dies geschieht beim ersten Laden des Templates.
Anschließend (wenn man das Template ausgeben will) wird der folgende REGEXP drüber gejagt:
/\{if (\d+) (.*)\}(.*)\{else \\1\}(.*)\{\/if \\1\}/sieU
bzw.
/\{if (\d+) (.*)\}(.*)\{\/if \\1\}/sieU

wobei \\1 die ID ist, die jeden "If-Tag" identifiziert und somit einzigartig macht.


Ich möchte nun aber auch Schleifen einbauen, also beispielsweise foreach.
Das Problem ist, dass man auch If in Schleifen verwenden können soll und umgekehrt (also Schleifen zwischen {if ...} und {/if}.
Wenn ich das aber nacheinander parse (also nacheinander einen REGEXP für If und danach einen für Schleifen drüberjage), dann funzt If in Schleifen nicht. Wenn ich erst Schleifen parsen würde und dann If würde wiederum Schleifen zwischen {if} und {/if} nicht funktionieren.

Hat jemand eine Idee, wie man das lösen könnte?

  #42  
Alt 03.10.2004, 10:17
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Ich hol das Thema nochmal hoch weil es für mich grade Interessant wird

Ich hab leider komplett die Übersicht verloren deswegen wäre es für mich ganz nützlich wenn mir jemand kurz nochmal das komplette, funktionierende Script posten könnte

Antwort


Stichworte
-


Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
Gehe zu






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