Dies würde es ermöglichen, nach Themen zu filtern, denen über das Events-Plugin ein Event zugeordnet wurde, indem die
/filter-Route und das Custom Topic Lists-Plugin verwendet werden.
Das Problem
Das Discourse Events-Plugin erstellt detaillierte Event-Themen, aber derzeit gibt es keine Möglichkeit, diese von Nicht-Event-Themen mit der Abfragesprache für den Themenfilter zu trennen.
Die vorhandenen Workarounds haben alle Nachteile:
- Die Route
/upcoming-eventszeigt Events als Kalender an und nicht als filterbare Themenliste – obwohl sie das vielleicht sollte!!! - Das Theme-Component Events Calendar on Custom Lists hat eine clientseitige Einstellung „Nur Themen mit Events anzeigen“, funktioniert aber erst nachdem die Liste geladen wurde – es handelt sich nicht um einen echten serverseitigen Filter, er spielt sich schlecht mit der Paginierung und kann inkonsistentes Verhalten zeigen.
- Konventionsbasierte Ansätze (dedizierte Kategorien, erforderliche Tags) erfordern strikte Disziplin bei der Inhaltsverwaltung.
Vorschlag zur Lösung
Das Events-Plugin sollte die DSL des Themenfilters um einen event:-Filter erweitern, wobei dasselbe Muster wie bereits im Solved-Plugin (status:solved / status:unsolved) und im Assign-Plugin (?assigned=username) verwendet wird.
Beispiel-Syntax:
event:yes # Themen mit zugeordnetem Event
event:no # Themen ohne Event (via -event:yes)
-category:announcements event:yes # Events außerhalb von Ankündigungen
tag:meetup event:yes order:created # Getaggte Meetup-Themen mit Events, sortiert nach Neuesten
Eine Variante status:events könnte ebenfalls in Betracht gezogen werden, um Konsistenz mit dem bestehenden status:-Namespace zu wahren, aber event: liest sich für den primären Anwendungsfall natürlicher.
Warum dies die richtige Ebene ist
Die Filterdokumentation stellt ausdrücklich fest:
Das Events-Plugin speichert bereits strukturierte Eventdaten (Startdatum, Enddatum, Status, RSVPs) in dedizierten Tabellen. Ein serverseitiger Filter kann diese effizient abfragen – etwas, das ein clientseitiges Component schlichtweg nicht kann.
Anwendungsbeispiel
Als Community-Manager möchte ich eine teilbare URL – verlinkbar in meiner Seitenleiste, einbettbar über Custom Topic Lists und nutzbar im Theme-Component Filtered Topic Lists –, die zuverlässig alle Themen in jeder Kategorie mit zugeordnetem Event anzeigt, sortiert nach Eventdatum.
Heute kann ich diese Abfrage nicht mit Zuversicht konstruieren. Mit einem event:-Filter könnte ich:
event:yes order:created
…und eine saubere, paginierte, berechtigungsbewusste Themenliste aller Events auf meiner Website erhalten.