侧边栏的消息部分

:information_source: 摘要 向侧边栏添加个人和群组消息收件箱链接,包括未读消息指示器
:eyeglasses: 预览 Theme Creator
:hammer_and_wrench: 代码仓库 GitHub - moin-Jana/sidebar-messages-section: Adds personal and group message inbox links to the sidebar, including unread message indicators.
:question: 安装指南 如何安装主题或主题组件
:open_book: Discourse 主题新手? Discourse 主题使用入门指南

安装此主题组件

该组件向侧边栏添加了一个 消息 部分,其中包含指向个人消息收件箱的链接——包括用户的个人收件箱以及他们有权访问的任何群组收件箱。该部分还在标题旁边包含一个撰写新个人消息的按钮。

个人收件箱

默认情况下,该组件为所有用户添加一个指向个人收件箱的链接。通过 show_personal_inbox 设置,管理员还可以根据 Personal message enabled groups 站点设置,完全隐藏它或仅向允许创建私信的用户显示它。这反映了个人收件箱链接在通知菜单、用户个人资料和侧边栏“社区”部分中的显示方式。

:bulb: 为避免指向个人收件箱的重复链接,您可能希望删除侧边栏第一部分的“消息”链接。您可以通过打开 更多 菜单并选择 自定义此部分,然后从该部分中删除“消息”链接来实现此目的。

群组收件箱

所有包含至少一条消息且用户是其成员的群组收件箱将自动显示在侧边栏中。管理员可以使用 hide_group_inboxes 设置隐藏特定的群组收件箱,这在群组收件箱不再被积极使用时非常有用。

另一个设置 use_group_page_inbox 允许您选择群组收件箱链接是在用户消息界面 (/my/messages/group/{group_name}) 中打开,还是在群组页面 (/g/{group_name}/messages/inbox) 中打开。

未读指示器

每个收件箱链接根据用户对“显示新项目计数”的偏好显示当前消息状态:数字计数。大于 100 的值显示为 99+

高级群组收件箱配置

要自定义群组收件箱的顺序或更改在侧边栏中显示的名称,您可以使用 advanced_group_inbox_configuration 设置。

在此设置中,您可以:

  • 从下拉列表中选择一个群组
  • 可选地定义一个将显示在侧边栏中的自定义名称
  • 使用底部的按钮重新排序已配置的群组

自定义名称在设置本身中也很有帮助。
如果未提供名称,该条目将标记为 group 1group 2 等(基于其位置)。添加临时名称可以使重新排序更容易,如果愿意,您可以在保存前将其删除。

未添加到高级配置中的带有消息的群组仍将显示在侧边栏中,排在已配置的群组之后,并按其群组 ID 排序。

hide_group_inboxes 设置中列出的群组将始终被隐藏,无论它们是否也存在于高级配置中或是否有消息。仅管理员的警告有助于突出显示何时将群组添加到这两个设置中。

您可以在下面的截图中看到一个配置示例以及它如何影响顺序和显示的名称:


消息部分的位置

要更改消息部分的位置,您可以使用 CSS,例如

或者,您可以安装 导航(侧边栏)菜单显示控制 组件,其中包含一个用于更改侧边栏部分顺序的设置。在调整其位置时,请使用 inbox-section 作为部分名称。

16 个赞

干得漂亮,Moin!:clap: :tada:

4 个赞

小建议:也许 javascripts/discourse/api-initializers/group-inboxes-in-sidebar.gjs 应该是一个 JS 文件而不是 GJS?

很棒的组件!


我花了最后 10 分钟浏览代码并检查核心类,我必须说 Discourse 的构建是多么出色(并且仍然是),以至于一切都如此契合。

2 个赞

是的,该 API 提供了几乎所有您需要的功能,使该部分的外观和工作方式与其他所有部分相同。聊天功能也使用了它,这可能影响了开发。这些功能是同时开发的。
不幸的是,显示核心部分中未读主题数量的 get badgeText() 不受支持,所以我不得不对这些数字做一些巧妙的处理。

4 个赞

我没有找到相关的管理员设置,所以在此发布一个通过 CSS 隐藏它的方法:

.sidebar-section-link[data-link-name="my-messages"] {
    display: none;
}
2 个赞

您为什么更喜欢使用 CSS 隐藏链接,而不是使用管理员自定义侧边栏的现有选项?使用 CSS 隐藏似乎比使用内置的 Discourse 选项更容易出错。

2 个赞

Derp,你说得对。我把它想得太复杂了,以为它会在管理员控制台和/或核心功能中是一个设置。

1 个赞

不只你一个人在那边看。:joy:


这是一个很棒的组件!

2 个赞

我扩展了该注释:

5 个赞

是的,你说了。但是作为管理员,我们通常习惯于通过管理面板进行操作 :wink:。因此,在快速浏览说明时,我们可能会忽略一些细节。

即使是核心更新,我也确信我们中的许多人并不总是会仔细阅读所有细节,直到我们使用的某些东西被移到了另一个区域。

很久很久以前,以安卓为例,我记得姜饼(Gingerbread)以前有导航(Nav)和地图(Maps)。在一次更新中,它们与地图合并后,我花了大约 10 分钟寻找导航。:joy:

这是一个出色的主题组件,非常适合那些严重依赖消息(Messages)的站点!感谢 @moin 带来的出色工作!

为了让那些经常使用群组(Groups)的用户(消息是其中的一个重要组成部分)能更好地使用它,您是否可以考虑以下建议?

在侧边栏中可选择的位置

为了在用户界面中更突出“消息”,我希望将它们放在侧边栏的顶部(即紧接在链接下方)。基本上,我希望人们能够一目了然地看到他们(按群组划分的)最近的消息,而无需依赖通知。

我使用了以下 CSS 来实现这一点,但我怀疑这也会对其他人有所帮助:

/* 确保“消息”部分首先出现在 flexbox 容器中 */
.sidebar-section-wrapper {
  order: 1;
}
.sidebar-section-wrapper[data-section-name="inbox-section"] {
  order: 0;
}

在群组上下文中打开群组收件箱

我希望我的用户能够轻松找到并与他们的群组进行交互。对我来说,让他们在从群组页面访问的收件箱(即 /g/the-group/messages/inbox)中处理消息,而不是在他们的个人收件箱页面(即 /my/messages/group/the-group)中处理消息,会更有意义。

这为他们提供了一个干净的、以群组为中心的页面,可以轻松访问其他群组成员和设置:

如果能通过主题组件(TC)中的一个设置来控制这一点,那就太棒了。

3 个赞

我考虑过这个问题,关于哪种路径是更好的默认设置以及是否应该有一个设置,但我因为目前不记得的原因将其移除了。我稍后会看一下,而不是明天。我想这与未读消息指示器有关。如果后果是不会有未读消息指示器,你仍然更喜欢这条路径吗?

我认为目前的位置与核心中已有的消息部分相同。
已经有一个很棒的组件可以控制侧边栏中部分的顺序:Navigation (sidebar) menu display control
为了避免两个组件都试图覆盖顺序而产生冲突,管理员如果想要不同的顺序,使用现有组件可能更有意义(作者确认使用“inbox-section”作为部分名称有效)。
我需要看看我是否能为此提供一个额外的设置。无论如何,我希望避免组件之间相互干扰。

2 个赞

我一直在 我的分支 上摆弄这个,发现了同样的问题。它有效,但会丢失未读消息指示器和侧边栏上的链接高亮。这两样东西确实价值很高!

我已经为我的进展提交了一个拉取请求(PR):

但要真正实现,它确实需要未读指示器和链接高亮起作用,对吧?

说得好!那是个好得多的主意。可耻的是,我实际上是那个 TC 的作者之一!

1 个赞

你为什么使用 href 而不是 route? 我认为 href 完全不能与未读指示器一起工作。我更担心的是 group.messages.inbox 路由上的数字无法像在 userPrivateMessages 中那样使用。

1 个赞

因为我是一个很差劲的开发者,尝试了很多方法才凑效!可能也归功于我对不太聪明的生成式人工智能(gen AI)不健康的依赖 :wink:

我曾试图利用路由(routes),但实际上没能让它覆盖现有的路由。所以我放弃了。

我曾想知道是否有可能在劫持链接指向另一个位置的同时,获得那些数字/行为。但这对于简单老练的我来说有点复杂。

欢迎随时“改进”它!

(顺便说一句,了不起的 @moin 已经做到了这一点,添加了功能——使其正常工作了!)

2 个赞

这确实效果很好。说来有些惭愧,我是那个 TC 的作者之一(主要贡献者是 @lilly:flushed_face:

如果能把这个信息加到 OP(原始帖子)中就太好了。

2 个赞

@nathank 要求添加一个选项来更改侧边栏中群组收件箱的顺序。我之前在 Configuring the order of groups in theme component settings 中征求了关于如何最好地处理此问题的意见,我认为我现在有了一个解决方案。

我将此与显示群组全名而非简称的请求结合起来。由于在这种情况下全名不易获取,因此解决方案是允许管理员定义一个“自定义显示名称”作为替代。先前仅用于在配置中显示群组名称的字段,现在也用于控制侧边栏中显示的名称。

这两个功能都通过新的 advanced_group_inbox_configuration 设置来处理。

在此设置中,您可以:

  • 从下拉列表中选择一个群组
  • 可选地定义一个将显示在侧边栏中的自定义名称
  • 使用底部的按钮重新排序已配置的群组

自定义名称在设置本身中也很有用。
如果未提供名称,该条目将根据其位置标记为 group 1group 2 等。添加一个临时名称可以使重新排序更容易,如果愿意,您可以在保存前将其删除。

未添加到高级配置中的带有消息的群组仍将显示在侧边栏中,排在已配置的群组之后,并按其群组 ID 排序。
列在 hide_group_inboxes 设置中的群组将始终被隐藏,无论它们是否也存在于高级配置中或是否有消息。


在此示例中,未为版主群组输入自定义名称,因此它在配置中显示为 group 1。其他群组具有自定义名称。

此配置的结果是:


在这里您可以看到 ‘doggo-daily’ 和 ‘cat_pics’ 收件箱已切换位置,并且显示时没有连字符或下划线。‘Team’ 收件箱显示在高级设置中配置的群组下方。
您还可以看到一个仅限管理员的警告,当 ‘admin’ 群组同时被添加到高级配置和 hide_group_inboxes 设置中时,该警告会出现。

4 个赞

这对于那些利用群组进行交流的人来说简直太棒了。干得好,@Moin

感谢您倾听并积极采纳其他(包括我)的反馈——并开发出如此设计精良且实用的主题组件,优雅地解决了长期存在的问题。

2 个赞