现在可用的可主题化站点设置

我们为主题开发者增加了一种控制网站体验的新方法。可主题化的站点设置允许主题覆盖 Discourse 核心定义的有限组站点设置。:gear:

可主题化的站点设置有何不同?

我们已经有了 主题设置主题修改器 的概念,那么可主题化的站点设置有何不同?以下是快速摘要:

  • 主题设置 - 这些是用于控制主题或组件内的 UI 和功能的自定义设置,并提供配置选项。这些不能更改 Discourse 的核心功能。
  • 主题修改器 - 允许主题或组件修改 Discourse 核心的选定服务器端功能,作为构建插件的替代方案。
  • :sparkles: 可主题化的站点设置(新增) - 允许主题(而非组件)覆盖一小部分核心站点设置,这些设置通常控制 UI 的部分和其他次要功能。这使得主题能够更好地控制整个网站体验。

可主题化的站点设置与其覆盖的站点设置具有相同的数据类型和值。在所有意图和目的上,数据库中的站点设置值将变得无关紧要,因为每个主题现在都单独控制此值。

管理员如何查看和更改可主题化的站点设置?

管理员可以在两个地方查看和更改可主题化的站点设置。首先,在每个单独的主题页面上,现在有一个“主题可以覆盖的设置”部分,如下所示,位于显示主题定义的主题设置的其他部分之上:

点表示该值已从站点设置的默认值更改。按“重置”会将主题站点设置值更改为与站点设置默认值匹配。

管理员可以查看这些设置的第二个地方是新页面 /admin/config/theme-site-settings

从这里,管理员可以看到所有可主题化的站点设置、默认站点设置值以及哪些主题正在覆盖此值。当您将鼠标悬停在主题名称上时,UI 将显示该主题设置的值。

我现有的站点设置更改会怎样?

如果您已将站点上的 enable_welcome_bannersearch_experience 更改为默认值以外的值,我们将自动将这些值迁移到您网站上安装的每个主题,因此您的会员在 UI 上不会看到任何变化。

它们在哪里定义?

可主题化的站点设置在核心 config/site_settings.yml 文件中定义。每个可主题化的站点设置都定义了 themeable: true 选项。

目前,只有两个站点设置是可主题化的——enable_welcome_bannersearch_experience——但将来我们可能会使更多站点设置可主题化。

主题作者如何控制默认值?

主题作者可以在 about.json 文件中使用 theme_site_settings 键来定义主题站点设置覆盖,如下所示:

"theme_site_settings": {
  "enable_welcome_banner": false
}

这里的任何值都将保存到数据库并与主题关联。一旦保存了值,当主题更新时,about.json 文件中 theme_site_settings 的更改将不会影响当前保存的数据库值,因为我们无法知道管理员在此期间是否更改了设置。

可主题化站点设置有哪些限制?

可主题化站点设置实际上只用于控制 UI 的元素,并且在检索其值时,我们需要主题 ID,因此存在这些限制:

  • 可主题化站点设置不能在 Sidekiq 作业中使用
  • 可主题化站点设置不能在 Markdown 规则中使用
  • 可主题化站点设置将使用主题 ID 作为键单独缓存到客户端站点设置
  • 可主题化站点设置将使用应用程序预加载器覆盖客户端 siteSettings 服务上的键
  • SiteSetting.client_settings_json 不会包含可主题化站点设置,而是可以使用主题 ID 调用 SiteSetting.theme_site_settings_json
  • 通常,主题站点设置仅用于控制 UI 部分的简单设置,不用于服务器端。
34 个赞

非常感谢这次更新!这非常有帮助!

所以只是确认一下,这会更改那些没有手动设置的设置吗?

7 个赞

如果在此迁移发生后,我稍后更改 enable_welcome_banner 会怎样?我是否需要相应地调整每个主题?

4 个赞

是的,您现在无法直接更改这些站点设置,它们只会显示在每个主题的“编辑”页面中。

2 个赞

是否也应包含“欢迎横幅位置”设置?

3 个赞

主题化网站设置是否也能包含资产的网站设置,例如徽标 onebox 图片?

3 个赞

这里有一个快速更新——主题化站点设置现在会在搜索“所有设置”时显示,以便更容易发现它们:

4 个赞