Frage zur Einbindung von eigenem BBCode

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
MrAnes
Mitglied
Beiträge: 9
Registriert: 08.04.2009 16:53
Wohnort: Bietigheim-Bissingen
Kontaktdaten:

Frage zur Einbindung von eigenem BBCode

Beitrag von MrAnes »

Hallo,

ich habe folgedes Problem:
Ich möchte gerne einen eigenen BBCode einführen. Beim Anzeigen des Post soll der Inhalt durch eine PHP-Klasse geschleift und der result ausgegeben werden.
Der Rückgabewert der Klasse ist ein DIV in dem sowohl Text als auch Bilder enthalten sind.

Die Syntax des BBCodes soll so aussehen:
[MyCode]"hier der Inhalt"[/MyCode]

Um es etwas genauer zu erläutern kurz der Hintergrund:
zwischen [MyCode] und [/MyCode] soll später ein VorlagenCode stehen, wie er zum Beispiel von GuildWars erstellt wird. Die PHP-Klasse wandelt diesen Code in eine kurze Beschreibung gefolgt von den 8 Fertigkeitssymbolen(jpeg) um.
Ich möchte hiermit den User ermöglichen Fertigkeitsvorlagen grafisch mit anderen zu tauschen.

Das wäre auch alles kein Problem, wenn ich verstehen würde, wie ich den BBCode parse.

Wäre super, wenn mir jemand helfen kann.

Dank und Gruß
Anes
Don´t fear the penguin
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Frage zur Einbindung von eigenem BBCode

Beitrag von Pyramide »

Bei der Implementierung unserer KB:quicklinks2 habe ich mich nach diversen anderen getesteten Ansätzen dafür entschieden, den von phpBB generierten Erintrag in der phpbb_bbcodes Tabelle nachträglich mit dem PCRE e-Modifier (execute php) auszustatten.

Beispiel: Aus dem BBCode [kb]{TEXT}[/kb] -> {TEXT} generiert phpBB folgenden DB-Eintrag:

Code: Alles auswählen

first_pass_match = !\[kb\](.*?)\[/kb\]!ies
first_pass_replace = '[kb:$uid]'.str_replace(array("\r\n", '\"', '\'', '(', ')'), array("\n", '"', ''', '(', ')'), trim('${1}')).'[/kb:$uid]'
second_pass_match = !\[kb:$uid\](.*?)\[/kb:$uid\]!s
second_pass_replace = ${2}
Dann ergänzt du beim second_pass_match ein 'e' und fügst deinen PHP-Code in second_pass_replace ein:

Code: Alles auswählen

second_pass_match = !\[kb:$uid\](.*?)\[/kb:$uid\]!se
second_pass_replace = do_something('${2}')
KB:knigge
MrAnes
Mitglied
Beiträge: 9
Registriert: 08.04.2009 16:53
Wohnort: Bietigheim-Bissingen
Kontaktdaten:

Re: Frage zur Einbindung von eigenem BBCode

Beitrag von MrAnes »

Danke erst mal für die schnelle Antwort.
Ich muss die Änderungen in der Datenbank vornehmen, wenn ich das richtig verstanden habe ... nur wo includiere ich dann meine PHP-Klasse?

Gruß
Anes
Don´t fear the penguin
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Frage zur Einbindung von eigenem BBCode

Beitrag von Pyramide »

MrAnes hat geschrieben:Ich muss die Änderungen in der Datenbank vornehmen, wenn ich das richtig verstanden habe
Ja.
MrAnes hat geschrieben:nur wo includiere ich dann meine PHP-Klasse?
Irgendwo, wo sie für alle phpBB-Seiten sichtbar ist (z.B. in includes/functions.php)
KB:knigge
MrAnes
Mitglied
Beiträge: 9
Registriert: 08.04.2009 16:53
Wohnort: Bietigheim-Bissingen
Kontaktdaten:

Re: Frage zur Einbindung von eigenem BBCode

Beitrag von MrAnes »

OK, ich hab jetzt folgendes in der DB:

Code: Alles auswählen

bbcode_match = [kb]{TEXT}[/kb]
bbcode_tpl = {TEXT}
first_pass_match = !\[kb\](.*?)\[/kb\]!ies
first_pass_replace = '[kb:$uid]'.str_replace(array("\r\n", '\"', '\'', '(', ')'), array("\n", '"', ''', '(', ')'), trim('${1}')).'[/kb:$uid]'
second_pass_match = !\[kb:$uid\](.*?)\[/kb:$uid\]!se
second_pass_replace = encodeGW('${1}')
in der functinos.php hab ich :

Code: Alles auswählen

include ('gwbbcode.php');

function encodeGW($code)
{
        $myGW = new GWEnCode();
        $mytemplate = $myGW->encode($code);

        return $mytemplate;
}
und die gwbbcode.php liegt im Verzeichnis "includes/".
Das ganze will ich dann in meinem Post mit:

Code: Alles auswählen

[kb]OwUTMw3C3JiUP0i3Vhg8AgoPAA[/kb]
aufrufen. Als Ausgabe bekomme ich leider nur:

Code: Alles auswählen

OwUTMw3C3JiUP0i3Vhg8AgoPAA
Warum ignoriert er meinen PHP-Code?

Gruß
Anes
Don´t fear the penguin
MrAnes
Mitglied
Beiträge: 9
Registriert: 08.04.2009 16:53
Wohnort: Bietigheim-Bissingen
Kontaktdaten:

Re: Frage zur Einbindung von eigenem BBCode

Beitrag von MrAnes »

KORREKTUR

Ich erhalte nach dem zweiten Versuch den Post zu senden nur noch eine weise Seite, habe seither KEINE Änderungen gemacht ...
Don´t fear the penguin
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Frage zur Einbindung von eigenem BBCode

Beitrag von Pyramide »

Ersetze doch mal die Funktion encodeGW durch eine ganze simple, z.B.

Code: Alles auswählen

function encodeGW($input) {
   return ($input == '1') ? 'Eins' : 'was anderes';
}
Wenn das funktioniert, liegt der Fehler irgendwo in deinem Modul.
KB:knigge
MrAnes
Mitglied
Beiträge: 9
Registriert: 08.04.2009 16:53
Wohnort: Bietigheim-Bissingen
Kontaktdaten:

Re: Frage zur Einbindung von eigenem BBCode

Beitrag von MrAnes »

OK, hab ich getestet.

Die Ausgabe bleibt gleich. Ich hab das Gefühl der kürzt den Fundktionsnamen weg und gibt nur den übergebenen Wert wieder aus.
Allerdings hab ich keinerlei logische Begründung dafür.

Hast noch ne Idee?
Gruß
Anes

P. S. die Ausgabe kommt wieder

Code: Alles auswählen

OwUTMw3C3JiUP0i3Vhg8AgoPAA
Don´t fear the penguin
MrAnes
Mitglied
Beiträge: 9
Registriert: 08.04.2009 16:53
Wohnort: Bietigheim-Bissingen
Kontaktdaten:

Re: Frage zur Einbindung von eigenem BBCode

Beitrag von MrAnes »

Hab jetzt deine Testfunktion

Code: Alles auswählen

function encodeGW($input) {
   return ($input == '1') ? 'Eins' : 'was anderes';
}
in die functions_posting.php eingefügt.
Jetzt bekomm ich immer ne weise Seite. Wenn ichs wieder lösche bekomm ich die gewohnte Ausgabe.
Don´t fear the penguin
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Frage zur Einbindung von eigenem BBCode

Beitrag von Pyramide »

Ich habe es gerade nochmal genauso wie hier beschrieben lokal getestet und es hat auf Anhieb funktioniert. Evtl. hilft es ja, wenn du nochmal den kompletten Cache leerst?

Beachte übrigens, dass du den direkt in der Datenbank manipulierten BBCode danach nicht mehr im ACP bearbeiten darfst - damit würdest du deine Änderungen wieder überschreiben.
KB:knigge
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“