新增事件:为话题过滤查询语言添加过滤器(Discourse Events 插件扩展)

:information_source: 这将允许通过 /filter 路由和 Custom Topic Lists 插件,筛选出那些通过 Events 插件关联了事件的帖子。

问题所在

Discourse Events 插件 创建了丰富的活动帖子,但目前无法使用 帖子筛选查询语言 将它们与非活动帖子隔离开来。

现有的变通方法都存在缺点:

  • /upcoming-events 路由以日历形式显示活动,而不是可筛选的帖子列表——尽管它本应该如此!!!
  • Events Calendar on Custom Lists 主题组件有一个客户端的“仅显示带有活动的帖子”设置,但它是在列表加载 之后 才生效的——它不是真正的服务器端筛选,与分页功能配合不佳,且行为可能不一致。
  • 基于约定的方法(专用分类、必需标签)需要严格的内容管理纪律。

提议的解决方案

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 # 标记为 meetup 且附带事件的帖子,按最新排序

为了与现有的 status: 命名空间保持一致,也可以考虑引入 status:events 变体,但对于主要用例而言,event: 读起来更自然。

为什么这是正确的层级

筛选文档明确指出:

Events 插件已经在专用表中存储了结构化的活动数据(开始日期、结束日期、状态、RSVP)。服务器端筛选可以高效地查询这些数据——这是客户端组件根本无法做到的。

用例示例

作为一名社区管理员,我希望拥有一个可共享的 URL——可以在侧边栏中链接、通过 Custom Topic Lists 嵌入,并可在 Filtered Topic Lists 主题组件中使用——该 URL 能够可靠地显示 所有分类中附带事件的帖子,并按活动日期排序。

目前,我无法自信地构建这样的查询。如果有了 event: 筛选器,我可以:

event:yes order:created

……从而获得一个干净的、支持分页的、具备权限感知功能的帖子列表,展示我站点上的所有活动。


相关话题