弃用搜索横幅主题组件

在过去的几个月里,我们一直在开发 Discourse 核心产品中的一个欢迎横幅功能。这个核心欢迎横幅功能会欢迎新老访客访问您的社区,并帮助他们轻松查找与其需求和兴趣相关的内容。随着这一新的核心横幅功能的推出,我们现在将弃用搜索横幅主题组件,以减少产品功能的复杂性,并确保所有 Discourse 用户都能持续受益于核心功能的改进。

在本主题中,我们将介绍弃用对当前使用搜索横幅主题组件的用户意味着什么。

如果您是托管用户…

我们将于 2025年11月20日 开始将托管用户从搜索横幅组件迁移到欢迎横幅功能。如果您目前正在使用该组件,您将收到一封包含您所在计划层级的确切迁移时间的邮件。

此次迁移将把您为主题组件更新的任何站点文本(即 search_banner.headlinesearch_banner.subheadsearch_banner.search_button_text)以及 show onplugin outletbackground image 主题组件设置的值,复制到核心功能设置中。

我们的目标是尽量减少此次迁移的可见影响,使核心功能创建的横幅与主题组件创建的横幅看起来相同。带有图片的社区可能会注意到图片位置的轻微偏移,这可以通过裁剪图片来解决,以确保您希望在横幅中显示的内容居中。

迁移完成后,主题组件将被禁用,您可以安全地从 主题与组件 页面(/admin/config/customize/components)中删除它。

如果您是自托管用户…

您应计划在 2025年12月15日 前自行从主题组件迁移到核心功能。您可以手动迁移或使用我们提供的脚本进行迁移。

手动迁移

以下是搜索横幅主题组件的站点文本和设置与核心欢迎横幅功能相同功能的映射关系:

设置描述 搜索横幅主题组件 欢迎横幅核心功能
欢迎横幅上显示的标题文本。 search_banner.headline 站点文本 js.welcome_banner.header.anonymous_membersjs.welcome_banner.header.logged_in_members 站点文本
欢迎横幅上显示的副标题文本。 search_banner.subhead 站点文本 js.welcome_banner.subheader.anonymous_membersjs.welcome_banner.subheader.logged_in_members 站点文本
横幅上搜索按钮使用的文本。\* search_banner.search_button_text 站点文本 js.welcome_banner.search_placeholder 站点文本
用于确定在哪些页面显示欢迎横幅的设置。 show on 主题组件设置 欢迎横幅页面可见性 站点设置
用于确定欢迎横幅在页面上的位置的设置。 plugin outlet 主题组件设置 欢迎横幅位置 站点设置
欢迎横幅上使用的背景图片。 background image light 主题组件设置 欢迎横幅图片 站点设置

\* 注意:核心欢迎横幅功能不支持显式的搜索按钮,因此我们建议将此文本映射到可自定义的搜索字段占位符文本,以获得类似的结果。

脚本迁移

迁移包括三个必须按以下顺序运行的 rake 任务:

  1. 迁移组件设置:
    themes:advanced_search_banner:1_migrate_settings_to_welcome_banner
  2. 迁移组件翻译:
    themes:advanced_search_banner:2_migrate_translations_to_welcome_banner
  3. 启用核心横幅,从使用该组件的主题中排除,并禁用组件:
    themes:advanced_search_banner:3_exclude_and_disable

在容器中运行的文件 \u003crandom_name\u003e.sh

  1. task_1.sh
#!/bin/bash

cd /var/www/discourse && rake themes:advanced_search_banner:1_migrate_settings_to_welcome_banner
  1. task_2.sh
#!/bin/bash

cd /var/www/discourse && rake themes:advanced_search_banner:2_migrate_translations_to_welcome_banner
  1. task_3.sh
#!/bin/bash

cd /var/www/discourse && rake themes:advanced_search_banner:3_exclude_and_disable

建议逐个运行每个 rake 任务,以更好地控制迁移过程。

我们还提供了一个方便的任务 themes:advanced_search_banner:migrate_all,可按顺序运行所有三个任务,但请自行决定是否使用。

9 个赞

你的意思是类似这样吗?

#!/bin/bash
cd /var/www/discourse && rake themes:advanced_search_banner:migrate_settings_to_welcome_banner  && rake themes:advanced_search_banner:migrate_translations_to_welcome_banner &&  rake themes:advanced_search_banner:exclude_and_disable

我觉得很多自托管用户可能无法从 <task_1_2_or_3> 推断出具体该怎么做。

这些 Rake 任务有可能失败吗?我们能否一次性全部运行?如果是这样,为什么不直接提供一个能完成所有任务的 Rake 任务?

也许用户更希望看到这样的方式:

docker exec -t app bash -c `cd /var/www/discourse && rake themes:advanced_search_banner:migrate_settings_to_welcome_banner  && rake themes:advanced_search_banner:migrate_translations_to_welcome_banner &&  rake themes:advanced_search_banner:exclude_and_disable`

那么,对于那些不知道如何操作的用户来说,他们是不是就会丢失所有旧设置和自定义文本?

那些直到三月才升级的用户,届时还能运行这些 Rake 任务吗?我不太清楚 12 月 15 日这个时间点的重要性在哪里。

3 个赞

我将让创建该脚本的同事来协助回答您问题的第一部分,但关于最后两个问题:

不会。
脚本是一种选择;手动迁移是另一种选择。这就是为什么我们提供了非常清晰的说明,解释主题组件的设置/字符串如何映射到欢迎横幅的设置/字符串。

12月15日是我们完成托管客户迁移的时间,也是我们正式停止支持/维护搜索横幅组件的时间。我们建议此组件的其他用户在此之前完成迁移,以免未来主题组件与 Discourse 核心不兼容时措手不及。

如果人们选择等到更晚,他们仍然可以运行这些任务或手动迁移,但在此期间,他们将运行一个不受支持的主题组件。

5 个赞

正确,提供的命令将按顺序运行所有三个任务。请注意,我们在每个任务前加上了数字以指示预期的执行顺序。

谢谢,我们已更新 脚本迁移 部分以使其更清晰。

我们不能保证 100% 成功,但我们已确保失败的可能性极低。

是的,我们添加了一个方便的任务:themes:advanced_search_banner:migrate_all

3 个赞

太棒了!我认为这会有很大帮助。像我们这样的人不介意在容器内运行一些简单的任务,但大多数自托管者则不然。

如果可能的话,将主题组件更新为在管理面板上有一个指向这里的折旧链接,那么这将帮助他们知道此主题的存在。

我想做的是找到一种方法来找出主题组件是否已安装,最好是通过 API。我想我会拉取主题组件的 JSON,通过 jq 运行它并按组件名称过滤。我认为这应该可行,我的仪表板有一个 API 密钥。然后我就可以让 ansible 在容器内运行 rake 任务了!

3 个赞

官方主题是否会预先更改自动安装的组件,以防止有人在不知情的情况下安装组件,而将来主题需要手动配置欢迎横幅才能正常工作?

3 个赞

仅供参考,我已执行了所述的 rake 任务,并且看起来它们已按计划成功完成。

rake.txt.md (3.1 KB)

2 个赞

所有使用“搜索横幅”(Search Banner)的官方主题都已更新并过渡到使用“欢迎横幅”(Welcome Banner):

4 个赞

关于此问题,我能问一下吗?我今天使用了安全模式,因为这是迁移后我第一次看到横幅(它在我的当前主题中被禁用;该组件是随 Air 主题安装的,而该主题当前处于禁用状态)。
所以,我注意到横幅中的文本现在与搜索横幅中的文本匹配



然后,我将界面语言切换到我的论坛的默认语言(德语),看起来这些文本没有被更改。



这是迁移的预期结果吗?我找不到任何日志表明是我编辑了这些文本;这就是我假设这是迁移的结果的原因。但我不太明白为什么它只更改了一种语言而不是其他语言。特别是它没有迁移默认语言环境。

是的,迁移脚本的设计是将默认搜索横幅文本迁移到核心欢迎横幅文本中。

为什么迁移文本?

执行迁移是因为搜索横幅是使用 Air 主题安装的——该脚本不会检查父主题(在您的情况下是 Air 主题)是否已禁用,这是脚本逻辑中的一个疏忽。


如果设置了多个语言环境,迁移脚本确实支持:源代码链接

这意味着搜索横幅没有设置德语文本,因此没有内容可供迁移。

作为迁移脚本的作者,我为这个疏忽表示歉意,以确保迁移顺利。如果我遗漏了您帖子中的任何内容,恐怕我无法提供更好的帮助,因为我已不再是核心团队的一员。如果您仍然需要关于此事的任何帮助,在 2025-12-15 执行迁移的人员应该能够提供帮助。

1 个赞

:thinking: 但为什么我在主题组件中看到了德语文本?那些是默认翻译,是一年多以前添加的。

所以,我仍然不太明白英语和德语之间的区别。看起来只有英语的网站文本被覆盖了。没有西班牙语、没有法语、没有中文,但搜索横幅组件是用所有这些语言翻译的。