Systemvoraussetzung
- Linux
- Windows
- PHP 3 >= 3.0.9
- PHP 4
- PHP 5
- PCREBibliothek
Datei(en)
template_tags.php
Problem
Sie haben eine Variable gefüllt mit HTML-Quellcode,
Text und z. B. UBB-Code.
Gerade in Foren wird diese Variante sehr gerne genutzt, also eigene Tags zu
definieren und diese dann mit regulären Ausdrücken zu durchsuchen. Die
Treffer werden dann meist mit CSS-Definitionen
oder wie hier im Beispiel mit
DIV-Tags
ersetzt.
Lösung
Zur besseren Veranschaulichung sehen Sie nachfolgend eine mögliche Variante
von solchen Tags. Es geht darum, den Namen der Tags, also hier z. B. „outerLoop“
und „innerLoop“, beizubehalten, jedoch die Tags selbst durch DIV-Tags
zu ersetzen.
26:
27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| Hier steht auch Text
[loop name="outerLoop"] <table> <tr> <td> <table> [loop name="innerLoop"] <tr> <td> Hier steht der eigentliche Text </td> </tr> [/loop] </table> </td> </tr> </table> und hier noch mehr [/loop]
| Beispiel 4.5: template_tags.php
Mit str_replace() (48) ersetzen wir zuerst alle schließenden Tags von „loop“
durch die schließenden Tags von „div“. Zudem müssen wir die Tags finden,
die den eigentlichen Namen enthalten, sodass wir auch diese durch DIV-Tags
erstzen können.
Der Aufbau der Tags beginnt immer mit einer eckigen Klammer, gefolgt von
den Namen „loop“, dann einem Leerzeichen und dem öffnenden Bereich „name=“.
Der Tag schließt stets mit einer eckigen Klammer.
Nun müssen wir noch die Ausnahmen generieren, falls etwa die Schreibweise
ein wenig abweicht und eventuell z. B. vor „loop“ ein Leerzeichen steht. Außerdem
müssen wir den Text vor und nach unseren Suchtreffern beibehalten.
Wir bauen den regulären Ausdruck zusammen (48) und lassen diesen dann
solange durch eine while-Schleife
(50) laufen, bis es keine Treffer mehr gibt.
Bei jedem Treffer ersetzen wir (51) den gesuchten Wert durch unsere DIV-Tags
und fügen zusätzlich unseren bestehenden Text ($pat[1] und $pat[6]) mit
ein. Der Name von „loop“ (hier innerLoop und outerLoop) fügen wir ebenfalls
wieder in den DIV-Tags
($pat[4]) ein.
Dieser Vorgang wird solange durchgeführt, bis kein Suchtreffer mehr vorhanden
ist. Erst danach können wir unsere modifizierte Variable ausgeben (54)
und haben im Quellcode die ersetzten DIV-Tags.
25:
26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| $str = '
Hier steht auch Text [loop name="outerLoop"] <table> <tr> <td> <table> [loop name="innerLoop"] <tr> <td> Hier steht der eigentliche Text </td> </tr> [/loop] </table> </td> </tr> </table> und hier noch mehr [/loop] ';
$str = str_replace ("[/loop]","</div>","$str");
$pattern = '=^(.*)\[(.*)loop(.*)name\="?(\S+)"([^\]]*)\](.*)$=msi';
while (preg_match($pattern, $str, $pat)){
$str = $pat[1].'<div name="'.$pat[4].'">'.$pat[6]; }
echo $str;
| Beispiel 4.6: template_tags.php
Ausgabe im Browser
Hier steht auch Text
Hier steht der eigentliche Text
und hier noch mehr |
Ausgabe im Quellcode
Hier steht auch Text
<div name="outerLoop">
<table>
<tr>
<td>
<table>
<div name="innerLoop">
<tr>
<td>
Hier steht der eigentliche Text
</td>
</tr>
</div>
</table>
</td>
</tr>
</table>
und hier noch mehr
</div> |
Sie können dieses Beispiel für Ihre Bedürfnisse so anpassen, dass auch dort die
Tags geändert werden. Sie sollten aber immer mehrere Varianten ausprobieren,
da es immer wieder zu kuriosen Ersetzungen kommen kann.
Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!
Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.
|