# 通知横幅

**URL:** https://meta.discourse.org/t/notification-banners/325279
**Category:** Theme component
**Created:** [2024年九月6日 08:47 UTC](https://meta.discourse.org/t/notification-banners/325279 "2024-09-06T08:47:28Z")
**Posts on this page:** 11
**Page:** 3

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2025年十一月4日 14:17 UTC](https://meta.discourse.org/t/notification-banners/325279/41 "2025-11-04T14:17:15Z")

</div>

好的，我刚测试了一件事。关闭了测试横幅，更改了开始和结束日期，保存后重新加载了页面。没有横幅了。

所以一旦对用户消失，就永远消失了吗？

---

<div class="post-metadata">

### Author: ![gormus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gormus/32/428592_2.png) [@gormus](https://meta.discourse.org/u/gormus)
#### Post date: [2025年十一月4日 14:58 UTC](https://meta.discourse.org/t/notification-banners/325279/42 "2025-11-04T14:58:20Z")

</div>

啊！@Roi，你说得很有道理，简单来说答案是肯定的。

每个横幅都会根据其索引号和插件插槽名称分配一个 ID。然后，关闭的横幅的 ID 会存储在浏览器的本地存储中。

> <https://github.com/gormus/discourse-notification-banners/blob/9f48701ad007d5d47e6a88901402b0f601c56be8/javascripts/discourse/api-initializers/notification-banners.gjs#L72>

 ![Screenshot 2025-11-04 at 3.50.59 PM](https://global.discourse-cdn.com/meta/original/4X/5/c/8/5c85cd14f7a45be509440f7aaa45e82ffeaa98e0.png)

因此，如果一个横幅被关闭，即使其配置发生更改，它仍将保持隐藏状态。

我明白这可能是一个问题；我会想出更好的处理方法。——欢迎提出建议 : )

---

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [2025年十一月4日 15:05 UTC](https://meta.discourse.org/t/notification-banners/325279/43 "2025-11-04T15:05:45Z")

</div>

#versatile-banner 使用 cookie 名称设置，管理员可以更改该设置，以使用户重新看到被隐藏的横幅。

---

<div class="post-metadata">

### Author: ![gormus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gormus/32/428592_2.png) [@gormus](https://meta.discourse.org/u/gormus)
#### Post date: [2025年十一月4日 15:23 UTC](https://meta.discourse.org/t/notification-banners/325279/44 "2025-11-04T15:23:22Z")

</div>

感谢 @Moin 的提示，重命名 cookie 以使已保存的 cookie 失效看起来是一个非常实用的解决方案。

在通知横幅中，横幅可以上下移动以更改排序顺序，或更改出口。如果之前在同一位置有一个横幅并已被关闭，这可能会导致新横幅被隐藏。

看来我需要更改 ID 的定义方式，然后或许调整 cookie 方法。🤔

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2025年十一月4日 18:07 UTC](https://meta.discourse.org/t/notification-banners/325279/45 "2025-11-04T18:07:03Z")

</div>

> [@gormus](#):
>
> 这可能会隐藏一个新横幅，如果之前在同一个位置有一个横幅并且已被关闭的话。

那么，cookie似乎比ID更好，特别是当您更改排序顺序时，ID会发生变化。👀

在我看来，每次更改横幅时生成一个新的（cookie）ID会很有用。

关于周期：如果已经是圣诞节，我希望有一个周期，可以按工作日（一个或多个）和月份中的某一天（一个或多个）来完成。而且可能两者都可以是“每隔x”，这样我就可以选择例如“每隔一个星期一和星期五”或“每隔三个月的第1天和第16天”。

---

<div class="post-metadata">

### Author: ![gormus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gormus/32/428592_2.png) [@gormus](https://meta.discourse.org/u/gormus)
#### Post date: [2025年十一月4日 18:44 UTC](https://meta.discourse.org/t/notification-banners/325279/46 "2025-11-04T18:44:46Z")

</div>

实际上，我已通过混合解决方案解决了此问题。

一个新的 **横幅配置版本** 设置将应用于所有横幅；以及新的独立 **横幅 ID** 值。

每个横幅的实际 ID 使用这两个值构建。我认为此方法应提供更好的灵活性：

- 可以通过更新单个横幅的横幅 ID 来重置其可见性，而不会影响其他横幅的可见性。
- 如果需要重置多个横幅或所有横幅的可见性，则可以更新横幅配置版本。

我将很快部署此更改。

 ![Notification Banners settings](https://global.discourse-cdn.com/meta/original/4X/f/a/f/faf3cd7938c35e0471f59912c514f407725b009a.png)  
 ![An individual banner configuration](https://global.discourse-cdn.com/meta/original/4X/8/d/c/8dcbffa3e278c6432fa4c164104e6e5d83161a1d.png)

* * *

**更新：** v1.4.0 现已发布。

为每个通知横幅引入了一个必需的\[1\] **横幅 ID** 字段，并更新了相关的设置、迁移逻辑和测试以支持此更改。此外，还添加了一个 **横幅配置版本** 设置，以帮助在发生重要更改时重置用户的横幅可见性。这些改进确保了横幅的关闭跟踪更加健壮且面向未来。

* * *

1. 唯一性取决于用户。不幸的是，主题对象设置不允许要求唯一值。但是，选项卡标签现在使用 ID 值使其更加可见。

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2025年十一月5日 12:01 UTC](https://meta.discourse.org/t/notification-banners/325279/47 "2025-11-05T12:01:51Z")

</div>

太棒了！谢谢！我会进行测试并向您提供反馈。 🙂

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2025年十一月6日 16:36 UTC](https://meta.discourse.org/t/notification-banners/325279/48 "2025-11-06T16:36:16Z")

</div>

说得对！太棒了。再次感谢！🙂

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2025年十一月17日 17:07 UTC](https://meta.discourse.org/t/notification-banners/325279/49 "2025-11-17T17:07:12Z")

</div>

我刚注意到，当一个横幅应该对所有用户显示并且在 `top-notices` 上时，它也会显示在登录和注册屏幕上。这对于桌面使用来说不是什么大问题，但它会干扰移动设备上这两个屏幕的使用。是否可以省略这些屏幕上的 `top-notices` 横幅？如果你问我，我也不介意在桌面版的登录/注册屏幕上没有横幅。 😉

---

<div class="post-metadata">

### Author: ![gormus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gormus/32/428592_2.png) [@gormus](https://meta.discourse.org/u/gormus)
#### Post date: [2025年十一月18日 14:38 UTC](https://meta.discourse.org/t/notification-banners/325279/50 "2025-11-18T14:38:09Z")

</div>

@Roi 如果您想将横幅限制为仅限登录用户，您可以简单地在受众群体中选择所有 TL 组。

或者，您可以使用可用的 CSS 选择器在登录/注册页面上隐藏横幅。

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2025年十一月19日 17:13 UTC](https://meta.discourse.org/t/notification-banners/325279/51 "2025-11-19T17:13:03Z")

</div>

> [@gormus](#):
>
> @Roi 如果你想将横幅限制为仅限登录用户，你可以在受众中选择所有 TL 组。

不，为未登录用户显示横幅会很好。

> [@gormus](#):
>
> 或者你可以使用可用的 CSS 选择器在登录/注册页面上隐藏横幅。

是的，我想起来我也隐藏了其他东西，现在我用 CSS 和 `display: none;` 帮自己解决了 _login-page_（登录页面）、_signup-page_（注册页面）和 _invite-page_（邀请页面）的问题。🙂

[上一頁](https://meta.discourse.org/t/notification-banners/325279.md?page=2)
