html aus string filtern
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bocken
code
dutzend
erfinden
ergebnis
fett schau
forum
gegenfrage
hilfe
hilfestellung
http
inhalt
nutzen
ordern
rolle
suche
verarbeiten
vergleich
versuchen
zeit
-
Hallo,
ich versuche derzeit ein kleines Script zu schreiben. Das ganze soll mir aus meiner Variabel $this->inhalt (OOP) den HTML-Code zwischen {loop:$name} und {loop:end} liefern.
Allerdings klappt das nicht so ganz wirklich.
Das Problem ist schon mal, dass er nichts findet! Ich dachte mir, man kann das doch mit preg_match_all lösen... aber dem scheint nicht so zu sein?
Hier mein Code:
$suche = '/\{loop:'.$name.'}(.*){loop:end\}/'; preg_match_all($suche, $this->inhalt, $bloecke); foreach ($bloecke as $block => $wert) { foreach($wert as $key => $elem) { //echo $elem; //$this->mem_loop .= $elem; } }
Mit diesem Suchstring müsste man doch das ganze herausfiltern können, oder?
Das ist der Code in meiner HTML Datei.
<table> {loop:admin} <tr> <td>{admin.pw}</td> <td>{admin.name}</td> </tr> {loop:end} </table>
Und das will ich als Ergebnis:
<tr> <td>{admin.pw}</td> <td>{admin.name}</td> </tr>
Wieso bringt er mir hier kein Ergebnis?
Ich schreibe das ganze, weil ich eine eigene Templateengine schreibe, die auch Loops verarbeiten kann.
Wenn ich den HTML-Code so habe, wie ich es im Ergebnis habe, würde ich mittels loop das ganze sooft ersetzen wie ich Datensätze habe (mysql_num_rows()).
Kann mir da vll jemand weiterhelfen?
Wäre sehr dankbar!
Danke!
Gruß,
Stefan -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich schreibe das ganze, weil ich eine eigene Templateengine schreibe, die auch Loops verarbeiten kann.
Gegenfrage: Wozu das Rad neu erfinden?
http://www.smarty.net -
Weil smarty und co lauter Zeugs beinhalten das ich net brauch.
Wenn ich meine Seite fertig habe siehts dann so aus:
Meine Seite 50 kb
Templateengine: 3 Mb
merkst du was?
krass ausgedrückt
Beitrag geändert: 24.9.2008 17:04:49 von skullsplitter -
@skullsplitter
Dein Vergleich ist (auch wenn sehr Krass ausgedrückt) Utpoisch!
Smarty als Engine nimmt sich nur das was es benötigt, von daher ist es egal ob Smarty mit allen Plugins etc. 3MB, oder nur 250Kb groß ist, das spielt nämlich dabei überhaupt keine Rolle. Außerdem muss es ja nicht Smarty sein, es gibt ein Dutzend anderer Template-Engines die man nutzen kann, und die eine Lib-Größe kleiner als 50kb aufweisen. Und in Zeiten von einem ~Upstream > 50kb/s, mach das den Bock auch nicht mehr fett
Schau dich mal hier um:
http://www.phpclasses.org
http://www.sourceforge.net
Gruß
webwalker -
Also, ich hab's nicht ausprobiert, aber zwei Ideen habe ich doch:
Zum einen bin ich mir nicht sicher, ob die Ausgabeschleife stimmt (sorry, zuletzt habe ich mit Perl gearbeitet, nicht mit PHP): Ist $bloecke wirklich ein Hash ?
Zweitens: {x} ist eigentlich ein Term in Regulären Ausdrücken, der heißt, daß das Zeichen / die (runden) Klammern davor x-mal vorkommen müssen. Ich habe keine Ahnung, wie der Parser von PHP reagiert, wenn x mal keine Zahl ist, aber ich würde auf alle Fälle versuchen, die geschweiften Klammern zu escapen (je ein Backslash voranstellen).
$suche = '/#{loop:'.$name.'#}(.*)#{loop:end#}/';
Ich mußte statt der Backslashes etwas anderes, nämlich # tippen, weil das Forum sie komplett gelöscht hätte.
-
@skullsplitter
Dein Vergleich ist (auch wenn sehr Krass ausgedrückt) Utpoisch!
Smarty als Engine nimmt sich nur das was es benötigt, von daher ist es egal ob Smarty mit allen Plugins etc. 3MB, oder nur 250Kb groß ist, das spielt nämlich dabei überhaupt keine Rolle. Außerdem muss es ja nicht Smarty sein, es gibt ein Dutzend anderer Template-Engines die man nutzen kann, und die eine Lib-Größe kleiner als 50kb aufweisen. Und in Zeiten von einem ~Upstream > 50kb/s, mach das den Bock auch nicht mehr fett
Schau dich mal hier um:
http://www.phpclasses.org
http://www.sourceforge.net
Gruß
webwalker
Hmh ich glaube wir zwei verstehen und einfach nicht... - mir geht es zum einen drum, dass ich es selber schreibe. Es ist noch keiner besser geworden, indem er Dinge von anderen übernommen hat. ;)
Deshalb will ich es ja selberschreiben. :)
Habe durch ein anderes Forum ebenfalls Hilfestellung bekommen, die Lösung:
$regex = '!#{loop:([^#}]+)#}(.*)#{loop:end#}!sU';
# => \
Damit sucht er mir alle Loops heraus. So ist es mir sogar möglich, mehrere Loops aufeinmal abzuarbeiten. :)
@dis-order - thx für deine Mühe :)
Vielen Dank für eure Hilfe!
Gruß
skull
Beitrag geändert: 25.9.2008 15:43:05 von skullsplitter -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage