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:
<?php
namespace wcf\system\event\listener;
use wbb\data\post\Post;
use wcf\system\WCF;
class ThreadListWithImagesListener implements IParameterizedEventListener {
public function execute($eventObj, $className, $eventName, array &$parameters) {
if (WCF::getTPL()->get('templateName') == 'board') {
$objects = WCF::getTPL()->get('objects');
if ($objects) {
foreach($objects as $thread) {
// get image of first post
$post = new Post($thread->firstPostID);
$message = $post->getMessage();
if (preg_match('/[\'"\]](http.*?\.(?:jpe?g|png))[\["\']/i', $message, $img)) {
$thread->threadImg = $img[1];
}
}
}
}
}
}
?>
Display More
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