PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BBCode parsen



Andreas
09.08.2007, 17:27
Um was geht es hier?
Vielfach möchte man BBCode parsen und ausgeben.
Diese Anleitung beschreibt wie dies zu realisieren ist.

Wie verwende ich BBCode in meinem Code?
Zunächst einmal sollte sichergestellt sein dass die Datasore-Objekte smiliecache (falls Smilies geparsed werden) und bbcodecache geladen werden, da ansonsten ggf. zusätzliche Abfragen anfallen.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------

Das eigentliche Parsen von Text ist dann recht einfach:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------

Die Parameter von do_parse sind:

$text = Der zu parsende Text
$do_html = 0/1 Gibt an ob HTML erlaubt ist (Standard = 0)
$do_smilies = 0/1 Gibt an ob Smilies in Grafiken umgewandelt werden sollen oder als Text bestehen bleiben sollen (Standard = 1)
$do_bbcode = 0/1 Gibt an ob BBCode geparsed werden soll (Standard = 1)
$do_imgcode = 0/1 Gibt an ob [img] BB code geparsed werden soll, unabhängig von $do_bbcode. (Standard = 1)
$do_nl2br = 0/1 Gibt an ob Zeilenumbrüche durch HTML-Zeienumbrüchew (<br />) ersetzt werden sollen (Standard = 1).
Falls HTML erlaubt wird sollte diese auf 0 gesetzt werden.
$cachable = 0/1 Gibt an ob der geprste Text gecached werden kann (nur bei Beiträgen von Bedeutung)


Alle Parameter außer $text können weggelassen werden, in diesem Fall werden die Standard-Werte verwendet.

Markus79
07.07.2011, 15:15
Hallo,
interessante Information, aber wie sieht das für vb 4.1.4 aus?
Wäre schön, wenn du da auch was hättest.

Gruß Markus

cellarius
09.07.2011, 20:55
Hast Du's denn mal ausprobiert? Es hat sich nämlich nichts geändert. ;)

Markus79
10.07.2011, 07:58
Moin Moin,
jou habs ausprobiert, aber es passiert einfach garnichts. Ich bekomme meine ganz normale Ausgabe ohne bbCode oder Smilies.

Ich verstehe das doch richtig, dass ich $text mit der Variable ersetzten muss, die ich mir aus der DB hole und $parsed_text dann nach dem registrieren der Variable mit {vb:raw parser_text} verwenden kann, oder?

Das ganze würde ich gerne auf einer eigenen Seite verwenden, die ich wie auf vB.org (http://www.vbulletin.org/forum/showthread.php?t=228112) beschrieben ist erstellt habe. Soweit funktioniert auch alles, bis auf das Parsen.

Die includes/class_bbcode.php include ich direkt unter der global.php.
$parser und $parser_text habe ich einfach direkt über dem Registrieren des Templates / Variablen gepackt.


Hier mal ein Auszug dessen, was ich da veranstalte :D
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Merke gerade, dass die Smilies gehen, nur der bbCode nicht.

cellarius
10.07.2011, 09:04
Halt Dich halt mal an den Code aus Andreas' Beispiel.

Du verwendest:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------

Da muss aber stehen:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------

Du setzt in Deinem Code den ersten und zweiten Parameter nach der Variable mit dem zu parsenden Text auf true. Das sind die Schalter für HTML und Smilies. Deshalb funktionieren Deine Smilies, aber der BBCode nicht. Wie die Schaltervariablen heißen, ist völlig egal, übergeben wird an die Methode nur der Wert, und deshalb kommt es auf die Reihenfolge an. Du könntest alles ab $do_bbcode weglassen, weil es offenbar ohnehin false bleiben soll, aber der Einfachheit halber lässt Du den Rest einfach stehen und verzichtest einfach darauf, ihn auf true zu setzen.

Markus79
10.07.2011, 10:15
Hallo,
vielen dank, das wars. Die Reihenfolge machts :D

Vielen Dank

cellarius
10.07.2011, 10:42
Schön, dass es jetzt funktioniert :)