这将允许通过
/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
……从而获得一个干净的、支持分页的、具备权限感知功能的帖子列表,展示我站点上的所有活动。