作为我们持续标准化 Discourse 代码库中渲染系统的一部分,我们正在替换主题列表的实现。
以前,这使用了“原始 handlebars”(.hbr)方法,并且可以通过模板覆盖和原始插件出口进行自定义。主题列表的新实现使用了现代 Glimmer 组件,并且从头开始构建,以可持续的方式进行自定义。
新实现现在可通过 glimmer_topic_list_mode 设置启用。
disabled:使用旧版“原始 handlebars”主题列表auto:将检测您当前插件和主题的兼容性。如果任何一个不兼容,它将使用旧版系统;否则,它将使用新实现。enabled:将使用新的主题列表实现。如果您有任何不兼容的插件或主题,您的站点可能会损坏。
我们已经更新了我们的大部分官方主题和插件以兼容新菜单。但是,如果您运行任何第三方插件、主题或主题组件来定制主题列表,则需要升级它们。
浏览器控制台中将打印警告,指明不兼容的来源。
发布时间表
这些是大致估计,可能会发生变化
2024 年第四季度:
核心实现完成
更新官方主题/插件(进行中)
在 Meta 上启用
发布升级建议
2025 年第一季度:
-
更新官方主题/插件 -
glimmer_topic_list_mode默认为auto;启用控制台弃用消息 -
弃用将触发管理员警告横幅,以处理任何剩余问题 -
应更新第三方插件和主题
-
3 月 1 日 - 为所有站点启用新的主题列表。站点设置的默认值将切换为 enabled,但仍可切换回“disabled”。
2025 年第二季度
4 月 1 日之后 - 最终移除旧版模式及相关代码
这对我意味着什么?
如果您的插件或主题包含任何“原始 handlebars”文件(命名为 .hbr 或 .raw.hbs),则需要更新这些文件以兼容新版本。常规的 Ember 组件/路由的 .hbs 文件不受此更改的影响。
如果您使用 modifyClass 修改 component:topic-list 或 component:topic-list-item,也需要进行升级。
如果您的站点有任何这些不兼容的自定义,浏览器开发者控制台中将打印警告消息,其中包含有关哪个主题/插件导致问题的说明。
替换项是什么?
一些旧的原始插件出口已转换为常规插件出口。这些可以一对一地更新。
更高级的自定义需要逐案评估。新的主题列表提供了许多新 API,可实现轻松而稳健的自定义。在此处了解更多信息:
以下是一些示例:
-
discourse-assign在特定主题列表中引入了新列 -
discourse-calendar使用新插件出口之一来显示事件日期徽章 -
discourse-solved使用新的 valueTransformer 来替换之前的 modifyClass
其他自定义怎么办?
如果使用我们引入的新 API 无法实现您的自定义,请通过创建新的 Dev 主题进行讨论,告知我们。
我是一名插件/主题作者。如何更新主题/插件以在过渡期间同时支持旧版和新版主题列表?
新插件出口在新旧主题列表的实现中都会被渲染。所以:当您实现了新版本后,只需删除旧的原始插件出口连接器即可。
对于替换模板覆盖或未现代化出口的 DAG(有向无环图)式自定义,您需要在过渡期间同时维护这两种实现。
一旦您的主题/插件同时支持旧版和新版实现,您可以在所有 .hbr 文件的顶部添加此魔术注释:
{{!-- has-modern-replacement --}}
这将消除弃用消息,并在“auto”模式下允许使用新实现。


