[3.2] BBCode Zugriff auf Post-Data

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Mithotyn
Mitglied
Beiträge: 6
Registriert: 22.06.2017 10:17

[3.2] BBCode Zugriff auf Post-Data

Beitragvon Mithotyn » 18.06.2018 16:13

Hallo zusammen,

ich bin gerade dabei eine Extension zu schreiben, die sich mittels Event core.text_formatter_s9e_configure_after an den Textformatter hängt, damit ich dort eigene BBCodes definieren kann.

Nun möchte ich gerne innerhalb meines BBCodes die aktuelle post_id nutzen, um einen Link zu einer externen Seite zu generieren.

Leider habe ich jetzt nach langer Suche noch keine Möglichkeit gefunden, dies zu tun.

Der Textformatter bietet die elegante Möglichkeit, vor dem Rendern (core.text_formatter_s9e_render_before) noch Parameter zu setzen, die dann im XSLT des BBCodes genutzt werden können. Aber ich komm an keiner Stelle an den aktuellen Post ran.

Ich hab schon versucht die Daten vorher mit core.viewtopic_post_rowset_data zu extrahieren, aber die Events kommen nicht in der richtigen Reihenfolge, so dass das nicht klappt.

Jemand ne Idee?

Gruß Joachim

Benutzeravatar
canonknipser
Supporter
Supporter
Beiträge: 1586
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: [3.2] BBCode Zugriff auf Post-Data

Beitragvon canonknipser » 18.06.2018 17:54

Wie sieht denn dein genauer Use-Case aus?
Die aktuelle Post-ID gibt es beim Verfassen eines Beitrages ja noch gar nicht. Die wird erst beim Speichern des Beitrages in der Datenbank gespeichert. Beim Anzeigen oder Editieren sollte sie aber abgreifbar sein.
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;) - Bilder
Kein Support via PN, nur im Board und (manchmal) im IRC

Mithotyn
Mitglied
Beiträge: 6
Registriert: 22.06.2017 10:17

Re: [3.2] BBCode Zugriff auf Post-Data

Beitragvon Mithotyn » 19.06.2018 07:36

Hi!

Also ich hab eine GoogleMap, auf der ich die Posts aus meinem Forum gerne anzeigen lassen würde. Der BBCode nimmt dafür Koordinaten entgegen und rendert im Beitrag einen Link "Auf Karte zeigen". Dahinter steckt ein Link zu meiner Karte, die sich dann in einem neuen Browserfenster öffnet.

Beim Laden der Karte wird an der angegebenen Koordinate ein Marker gesetzt und beim Draufklicken soll der Text des Posts inkl. Autor etc. angezeigt werden. Die Daten des Posts lade ich mir aus der PHPBB Datenbank. Auch soll in dem Popup dann wieder ein Link auf den Forenbeitrag angezeigt werden.

Das Anzeigen auf der Karte und das Laden der Daten aus der Datenbank klappt alles schon. Ich bekomme es nur nicht hin, dass der Link im BBCode weiß, aus welchem Post er aufgerufen wird.

Mal allgemein gesprochen:

Das neue BBCode System mit dem TextFormatter ist ein super mächtiges und flexibles Werkzeug. Damit lassen sich super einfach "Rich"-BBCodes erzeugen, die im Post zusätzliche Funktionalitäten bereit stellen könnten. Das macht aber nur dann richtig Sinn/Spaß, wenn der BBCode auch auf die Post-Daten zugreifen kann.

Für "einfache" BBCodes, die ich im AdminPanel eingeben kann, mag das uninteressant sein. Aber wenn ich schon eine eigene Extension schreibe, die neue BBCodes registriert, wäre da etwas mehr "Macht" nützlich.
Zuletzt geändert von Mithotyn am 19.06.2018 09:14, insgesamt 1-mal geändert.

Mithotyn
Mitglied
Beiträge: 6
Registriert: 22.06.2017 10:17

Re: [3.2] BBCode Zugriff auf Post-Data

Beitragvon Mithotyn » 19.06.2018 09:03

Ich hab jetzt einen fiesen Workaround hinbekommen, der mir aber so gar nicht gefällt.

Mein BBCode setzt anstelle der PostID nur einen selbst ausgedachten Platzhalter ein. Über einen weiteren Listener ersetze ich den Platzhalter dann vor dem Anzeigen des Posts mit der PostID des Beitrags.

In meinen Augen fürchterlich, da ich damit eine zusätzliche Schicht einziehe, in der der Post geparst und Variablen ersetzt werden. Genau das sollte ja der Textformatter bereits alles machen.

Code: Alles auswählen

class listener implements EventSubscriberInterface {
      
   public static function getSubscribedEvents() {
      return [
         'core.text_formatter_s9e_configure_after' => 'addBBCode',
         'core.viewtopic_modify_post_row'          => 'insertPostId'
      ];
   }
      
   public function insertPostId($event) {
      $post_row = $event['post_row'];
            
      $post_row['MESSAGE'] = str_replace('$$MY_POSTID$$', $post_row['POST_ID'], $post_row['MESSAGE']);

      $event['post_row'] = $post_row;
   }   
   
   public function addBBCode($event) {
      
      $configurator = $event['configurator'];
      
      $configurator->BBCodes->addCustom(
            '[mylink]',
            '<a href="http://www.myurl.de?postid=$$MY_POSTID$$">Link zur Karte für Post $$MY_POSTID$$</a>'
        );

   }
}

Benutzeravatar
gn#36
Administrator
Administrator
Beiträge: 9257
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: [3.2] BBCode Zugriff auf Post-Data

Beitragvon gn#36 » 26.07.2018 23:56

Du könntest dir das Event an der Stelle seines Aufrufs ansehen und schauen ob dir evtl. zusätzliche Informationen weiterhelfen würden. Vielleicht ist die ID ja da, wird aber nicht an das Event weitergereicht.

Alternativ könntest du dein Reihenfolge Problem vielleicht mit einem anderen viewtopic event lösen, es muss welche geben, die über die Beiträge laufen und vor dem Formatter kommen. Was den selbst angeht gebe ich dir aber recht: die Info ist bisher nicht vorgesehen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.


Zurück zu „Extension Bastelstube“