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

    Einmal editiert, zuletzt von Tensai (27. Januar 2020 um 19:09)

  • Tensai 27. Januar 2020 um 18:10

    Hat das Label von WSC 5.2.x auf WSC 3.1.x geändert.
  • 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

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!