根据用户组归属隐藏类别

继续讨论 如何将论坛分为两个主要部分(通用/群组)以及如何仅显示我可以创建新帖子的子类别

大家好,

这是一个主题组件,可以实现我一直想做的功能,但我希望得到大家关于代码的改进意见或建议。

我认为代码还不够完善,因此在其他人检查之前,我不想推荐它。

功能说明

通过 CSS 隐藏用户具有分类权限限制的所有主题,仅针对选定的页面生效。

代码仓库

仓库链接
framagit.org/oca/discourse-theme-shroud-subcategories

动机

我的社区有很多群组,我希望人们能够自然地忽略不属于他们自己群组的内容。我不想限制对内容的访问,只是不希望这些内容出现在主页上。他们应该能够通过主动进入特定分类来访问这些内容(例如,为了了解这里讨论了什么)。显然,合适的工具应该是“关注/忽略”功能,但由于 UI 设置需要超过两次点击,社区中几乎没人使用它。对分类页面的某些改进或许能解决这个问题,但这超出了我的能力范围。

因此,我使用了他们觉得足够简单的 UI:群组页面。在同一页面上会显示他们可以自由或受限访问的所有群组及其描述。这非常完美,他们只需点击并选择即可。群组页面对于他们来说太隐蔽了(藏在汉堡菜单内),所以我可以在主页上添加一个大的按钮链接。

现在,我需要将群组成员资格与分类帖子的显示关联起来。

工作原理

我使用的技巧是将分类权限设置为:

  • 所有人:阅读、发帖
  • 该群组:发起话题、阅读、发帖

然后,对于列表中的每个主题,检查是否存在分类权限限制。如果存在,则为主题元素添加一个类名 not-in-group

接着,CSS 会根据该类名设置 display:none 来隐藏这些主题。

用户界面

管理员可以选择此行为生效的页面。由于分类页面本身就是用来访问内容的,因此不应在此页面启用此功能。在我的网站上,所有这些群组都是子分类,并且从 latest 页面中被隐藏,我们通过 /c/groups/ 页面访问它们,因此该页面被用作目标页面。

改进建议

  • 能够选择过滤分类的父级分类(这样任何不属于该父级分类的子分类都不会被跳过)
  • 添加标签支持,如果某个主题包含特定标签,则不会被隐藏。
10 个赞

这对我来说说不通。为什么不使用分类权限来限制各组的可见内容呢?

4 个赞

因为我希望他们能够看到这些分类,但前提是他们愿意主动去查找。例如,在他们注册之前,想要了解特定项目上讨论的内容。但在主页上,我不希望他们被不感兴趣的话题刷屏。最好的办法是让他们通过“关注/忽略”功能自行处理,但这对他们来说太复杂了。另一个选项是注册加入群组,进入分类页面查看讨论内容,然后再退出群组。这对大多数人来说点击次数太多,而且他们可能也不敢这样做。最后一个选项是使用分类设置中的“从最新动态中移除”,但该设置会影响所有用户,包括那些正在关注该分类的用户。通过这种方法,我实现了类似“从最新动态中移除”的效果,但仅针对部分用户,并且可以应用于我想要的任何页面。希望这样更清晰一些。

2 个赞

这些改进已完成。

4 个赞

我觉得这很有趣。我可以看看示例,或者加入一个已安装该组件的论坛吗?

1 个赞

另外,使用此组件进行过滤是否也会导致帖子不会通过摘要邮件发送?因为那将非常棒。

1 个赞

不,它不会。它不会移除对帖子的访问权限,只是通过 CSS 将其隐藏。主题仍然会发送给该用户,并附带不显示该主题的指令。使用场景并非移除访问权限,而只是将其从首页(或任何选定的其他页面)中移除。抱歉,我尚未在无需登录的论坛上安装过它,但欢迎在此处或私信中提问。

2 个赞

谢谢!

这部分是什么意思?

1 个赞

如果您查看页面的源代码,主题信息已被发送。但主题组件指示忽略它。

1 个赞

它“仅”在浏览时控制内容的显示。这不是静音或忽略功能。但我认为这个解决方案在某些应用场景中非常有趣。恭喜 @oca 完成这项工作!

2 个赞

我会仔细查看一下。再次感谢!

1 个赞

你好,我安装了此主题组件,但现在在设置时遇到了问题。当我尝试选择标签和过滤类别时,我的选项似乎没有显示出来。例如,我们确实有一个“常见问题”(faq)标签,但无法选中它。我也尝试直接输入标签名称,但同样无效。

2 个赞

您已在仪表板中启用标签功能了吗?它位于“设置/标签”下。标签列表顶部的第一个复选框用于启用标签。之后,您创建的任何标签都应能正常工作。

1 个赞

是的,标签已启用。

1 个赞

设置参数不知道存在哪些标签。您需要在此处写入标签名称,点击 create: 'faq',这样标签名称就会被选中。您可以选择任意数量的标签,只要其中任意一个标签匹配,帖子就会显示出来。

请注意,如果您的账户具有管理员权限,那么它对每个类别都拥有完全权限。但隐藏类别是通过检查账户是否能够有效创建新帖子来实现的。您的账户可以创建,因此您的账户将能够看到所有类别中的所有帖子。为了测试该组件,我建议您创建一个测试账户,以查看普通用户所看到的内容。

2 个赞

谢谢。我相信我已经让它运行起来了,非常期待接下来的进展。感谢你的辛勤工作。

2 个赞

能否为正在追踪某个类别的人破例一次?

1 个赞