Beitrag von hempelr (1976 Beiträge) am Sonntag, 21.März.2004, 18:12.
@Perler - Ersetzung von Variablen in "Template"-Texten / regex bzw. eval
Hallo,
Christoph hatte mir vor kurzem ne coole Regex gepostet, die erlaubt, Varaiblennamen in Datenfeldinhalten zu ersetzen.
Nun werde aber damit logischerweise leider keine Sub-Aufrufe und Ausgaben mit ersetzt.
Kann man das irgendwie noch hinkriegen?
Mit eval gehts einwandfrei, aber da sind die Laufzeiten ums 10fache höher, und wenn das in nem Template 10mal passiert, und anstatt 0,01 Sekunden 0,1 Sekunden gebraucht werden, läuft das Template nur aufgrund der evals 1 Sekunde statt mit regex 0,1 Sekunde - das ist eigentlich nicht akzeptabel ;-)
Hier mal ein Beispiel:
in nem Datenbankfeld steht der HTML-Quelltext für ne Datensatzausgabe, in ner Sub im Haupttemplate werden bspw. Tabellen-Trennzeilen parameterabhängig generiert.
Datenbankfeldinhalt des Feldes $html des Datensatzes mit Inhalt "test" im Feld $htmlinhalt aus der DB layout:
---Anfang dbfeldinhalt Feld $html
<table>
<tr><td>$feld</td></tr>
${ \&tz(1,5,$fh) }
</table>
---Ende dbfeldinhalt
im Template wird der Datensatz geholt:
get "htmlinhalt==test" "layout";
dann soll der Feldinhalt ausgegeben werden unter Ersetzung der Variablennamne und interpolierten Subausgaben
mit eval geht es so einwandfrei:
---schnipp
$tab_ausgabe = eval "<<EOF;\n$html\EOF\n\n";
out $tab_ausgabe;
---schnapp
mit regex in folgender Art werden nur die Variablen ersetzt, die Subaufrufe aber nicht, die Zeile wird im Klartext mit eingesetztem Variableninhalt für $fh angezeigt :-((
---schnipp
($tab_ausgabe = $html)=~ s/\$([a-z_]\w+)/$$1/gie; # das ist CBs Regex
---schnapp
Hat da jemand vielleicht ne Idee, wie man das bauen könnte, damit es auch fix läuft? - das ist zur kompletten Trennung von Funktion und Content ja zwingend erforderlich und bei grossen Anwendungen dann werden die Laufzeiten mit eval wirklich inakzeptabel (weit über 1-2 Sekunden, das machen die Provider dann nicht mehr mit....
Danke für Tipp
Ruben
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 22.März.2004, 18:04.
Re: @Perler - Ersetzung von Variablen in "Template"-Texten / regex bzw. eval
Weiss garnich mehr was bei dem Thread mit H.Fehde rausgekommen ist, ging n paar mal hin- und her...
Wenn Du & auch mit ausgeführt haben willst, kannstes ja einfach einbauen, ca. so:
($tab_ausgabe = $html)=~ s/([&\$])([a-z_]\w+)/$1.$2/giee;
nich getestet ;-)