Это позволит фильтровать темы, к которым привязано событие через плагин Events, используя маршрут
/filterи плагин Custom Topic Lists.
Проблема
Плагин Discourse Events создает насыщенные тематические страницы событий, но в настоящее время нет способа изолировать их от обычных тем с помощью языка запросов фильтрации тем.
Все существующие обходные решения имеют недостатки:
- Маршрут
/upcoming-eventsотображает события в виде календаря, а не как фильтруемый список тем — хотя, возможно, он должен это делать!!! - Компонент темы Календарь событий на пользовательских списках имеет настройку «Показывать только темы со событиями» на стороне клиента, но она работает после загрузки списка — это не настоящий серверный фильтр, он плохо работает с пагинацией и может вести себя непоследовательно.
- Подходы, основанные на соглашениях (выделенные категории, обязательные теги), требуют строгой дисциплины в управлении контентом.
Предлагаемое решение
Плагин Events должен расширить DSL фильтрации тем добавлением фильтра event:, следуя тому же паттерну, который уже используется в плагине Solved (status:solved / status:unsolved) и плагине Assign (?assigned=username).
Пример синтаксиса:
event:yes # Темы, к которым привязано событие
event:no # Темы без событий (через -event:yes)
-category:announcements event:yes # События вне раздела объявлений
tag:meetup event:yes order:created # Темированные встречи с событиями, отсортированные по новизне
Также можно рассмотреть вариант status:events для согласованности с существующим пространством имен status:, но event: звучит более естественно для основного случая использования.
Почему этот уровень правильный
Документация по фильтрам явно указывает:
Плагин Events уже хранит структурированные данные о событиях (дата начала, дата окончания, статус, RSVP) в выделенных таблицах. Серверный фильтр может эффективно запрашивать эти данные — то, чего просто не может сделать компонент на стороне клиента.
Пример использования
Как менеджер сообщества, я хочу иметь общий URL — доступный для ссылки в боковой панели, встроенный через Custom Topic Lists и используемый в компоненте темы Фильтрованные списки тем — который надежно показывает все темы в любой категории, к которым привязано событие, отсортированные по дате события.
Сегодня я не могу уверенно составить такой запрос. С фильтром event: я смог бы:
event:yes order:created
…и получить чистый, пагинированный список тем с учетом прав доступа, содержащий все события на моем сайте.