Esto permitiría filtrar temas que tengan un Evento adjunto a través del plugin Events, utilizando la ruta
/filtery el plugin Custom Topic Lists.
El problema
El plugin Discourse Events crea temas de eventos enriquecidos, pero actualmente no hay forma de aislarlos de los temas sin evento utilizando el lenguaje de consulta para filtros de temas.
Las soluciones alternativas existentes tienen todas desventajas:
- La ruta
/upcoming-eventsmuestra los eventos como un calendario, no como una lista de temas filtrable - ¡aunque quizás debería serlo! - El componente de tema Eventos en Calendarios Personalizados tiene una configuración del lado del cliente “Mostrar solo temas con eventos”, pero opera después de que se cargue la lista — no es un filtro real del lado del servidor, no funciona bien con la paginación y puede comportarse de manera inconsistente.
- Los enfoques basados en convenciones (categorías dedicadas, etiquetas obligatorias) requieren una estricta disciplina en la gestión del contenido.
Solución propuesta
El plugin Events debería extender el DSL de filtros de temas con un filtro event:, siguiendo el mismo patrón ya utilizado por el plugin Solved (status:solved / status:unsolved) y el plugin Assign (?assigned=username).
Sintaxis de ejemplo:
event:yes # Temas con un evento adjunto
event:no # Temas sin evento (vía -event:yes)
-category:anuncios event:yes # Eventos fuera de anuncios
tag:meetup event:yes order:created # Temas etiquetados como meetup que tienen eventos, ordenados por los más recientes
También podría considerarse una variante status:events para mantener la consistencia con el espacio de nombres existente status:, pero event: se lee de manera más natural para el caso de uso principal.
Por qué esta es la capa correcta
La documentación de los filtros establece explícitamente:
El plugin Events ya almacena datos estructurados de eventos (fecha de inicio, fecha de fin, estado, confirmaciones) en tablas dedicadas. Un filtro del lado del servidor puede consultar esto de manera eficiente — algo que un componente del lado del cliente simplemente no puede hacer.
Ejemplo de caso de uso
Como administrador de comunidad, quiero una URL compartible — enlazable en mi barra lateral, incrustable mediante Custom Topic Lists y utilizable en el componente de tema Filtered Topic Lists — que muestre de forma fiable todos los temas en cualquier categoría que tengan un evento adjunto, ordenados por fecha del evento.
Hoy, no puedo construir esa consulta con confianza. Con un filtro event:, podría:
event:yes order:created
…y obtener una lista de temas limpia, paginada y consciente de permisos de todos los eventos en mi sitio.