EventListener gesucht für Hinzufügen von Template-Variablen in ThreadListBoxen

  • Hallo Community

    Da in unserem Forum bei den Thread-Listen anstelle des Avatars das erste Bild des ersten Posts anzeigt werden soll, habe ich folgenden EventListener geschrieben beforeDisplay@wcf\system\template\TemplateEngine:

    Der Eventlistener hängt die Url des ersten Bildes des ersten Post als Variable "threadImg" an die Thread-Objekte an und mittels einem angepassten threadList.tpl wird dann das Bild anstelle des Avatars angezeigt.

    Funktioniert soweit auf normalen Forums-Seiten auch perfekt.

    Nun die Frage:

    Thread-Listen können ja mittels ThreadListBoxController auch in Boxen dargestellt werden (z.B. letzte Beiträge im Dashboard oder ähnliches). Auch hier soll nicht der Avatar sondern ein Bild dargestellt werden, zumal ja das gleiche Template threadList.tpl verwendet wird. Dafür finde ich aber einfach keinen geeigneten EventListener, bzw. mit dem was vorhanden ist komme ich nicht klar. Verwende ich afterLoadContent@AbstractBoxController, krieg ich zwar irgendwo tief verschachtelt im Template-Objekt die Thread-Objekte, aber da ist alles protected.

    Wie kann ich also obigen EventListener auch auf Thread-Listen in Boxen anwenden?

    Bin für Hilfe dankbar.

    Gruss, Tensai

    Edited once, last by Tensai (January 27, 2020 at 7:09 PM).

  • Tensai January 27, 2020 at 6:10 PM

    Set the Label from WSC 5.2.x to WSC 3.1.x
  • So, habe es nun doch noch geschafft.

    Der EventListener ist afterLoadContent@wcf\system\box\AbstractBoxController. Das ganze war aber etwas aufwändiger als gedacht.

    Denn bei beforeLoadContent sind die Thread-Objekte ja noch nicht im eventObj und bei afterLoadContent ist das template ja schon in den content geschrieben. D.h. ich musste im EventListener den content nochmals überschreiben. Da aber die getTemplate-Funktion protected ist, musste ich diese im EventListener nachbauen und da zudem das box Property protected ist, muss man das über einen Hack auslesen (oder habe ich einen getter übersehen?).

    Alles in allem irgendwie ein Gemurks. Hier bräuchte es in der AbstractDatabaseObjectListBoxController Class in der loadContent() Funktion vor $this->content = $this->getTemplate(); dringend noch einen zusätzlichen Event afterReadObjects. Damit wäre das alles viel eleganter gegangen.

    Hier mein Code zur Info:

    Gruss, Tensai

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!