oca
1
继续讨论 如何将论坛分为两个主要部分(通用/群组)以及如何仅显示我可以创建新帖子的子类别:
大家好,
这是一个主题组件,可以实现我一直想做的功能,但我希望得到大家关于代码的改进意见或建议。
我认为代码还不够完善,因此在其他人检查之前,我不想推荐它。
功能说明
通过 CSS 隐藏用户具有分类权限限制的所有主题,仅针对选定的页面生效。
代码仓库
仓库链接
framagit.org/oca/discourse-theme-shroud-subcategories
动机
我的社区有很多群组,我希望人们能够自然地忽略不属于他们自己群组的内容。我不想限制对内容的访问,只是不希望这些内容出现在主页上。他们应该能够通过主动进入特定分类来访问这些内容(例如,为了了解这里讨论了什么)。显然,合适的工具应该是“关注/忽略”功能,但由于 UI 设置需要超过两次点击,社区中几乎没人使用它。对分类页面的某些改进或许能解决这个问题,但这超出了我的能力范围。
因此,我使用了他们觉得足够简单的 UI:群组页面。在同一页面上会显示他们可以自由或受限访问的所有群组及其描述。这非常完美,他们只需点击并选择即可。群组页面对于他们来说太隐蔽了(藏在汉堡菜单内),所以我可以在主页上添加一个大的按钮链接。
现在,我需要将群组成员资格与分类帖子的显示关联起来。
工作原理
我使用的技巧是将分类权限设置为:
然后,对于列表中的每个主题,检查是否存在分类权限限制。如果存在,则为主题元素添加一个类名 not-in-group。
接着,CSS 会根据该类名设置 display:none 来隐藏这些主题。
用户界面
管理员可以选择此行为生效的页面。由于分类页面本身就是用来访问内容的,因此不应在此页面启用此功能。在我的网站上,所有这些群组都是子分类,并且从 latest 页面中被隐藏,我们通过 /c/groups/ 页面访问它们,因此该页面被用作目标页面。
改进建议
- 能够选择过滤分类的父级分类(这样任何不属于该父级分类的子分类都不会被跳过)
- 添加标签支持,如果某个主题包含特定标签,则不会被隐藏。
10 个赞
这对我来说说不通。为什么不使用分类权限来限制各组的可见内容呢?
4 个赞
oca
3
因为我希望他们能够看到这些分类,但前提是他们愿意主动去查找。例如,在他们注册之前,想要了解特定项目上讨论的内容。但在主页上,我不希望他们被不感兴趣的话题刷屏。最好的办法是让他们通过“关注/忽略”功能自行处理,但这对他们来说太复杂了。另一个选项是注册加入群组,进入分类页面查看讨论内容,然后再退出群组。这对大多数人来说点击次数太多,而且他们可能也不敢这样做。最后一个选项是使用分类设置中的“从最新动态中移除”,但该设置会影响所有用户,包括那些正在关注该分类的用户。通过这种方法,我实现了类似“从最新动态中移除”的效果,但仅针对部分用户,并且可以应用于我想要的任何页面。希望这样更清晰一些。
2 个赞
debryc
(Deborah Chang)
5
我觉得这很有趣。我可以看看示例,或者加入一个已安装该组件的论坛吗?
1 个赞
debryc
(Deborah Chang)
6
另外,使用此组件进行过滤是否也会导致帖子不会通过摘要邮件发送?因为那将非常棒。
1 个赞
oca
7
不,它不会。它不会移除对帖子的访问权限,只是通过 CSS 将其隐藏。主题仍然会发送给该用户,并附带不显示该主题的指令。使用场景并非移除访问权限,而只是将其从首页(或任何选定的其他页面)中移除。抱歉,我尚未在无需登录的论坛上安装过它,但欢迎在此处或私信中提问。
2 个赞
oca
9
如果您查看页面的源代码,主题信息已被发送。但主题组件指示忽略它。
1 个赞
Mevo
10
它“仅”在浏览时控制内容的显示。这不是静音或忽略功能。但我认为这个解决方案在某些应用场景中非常有趣。恭喜 @oca 完成这项工作!
2 个赞
debryc
(Deborah Chang)
12
你好,我安装了此主题组件,但现在在设置时遇到了问题。当我尝试选择标签和过滤类别时,我的选项似乎没有显示出来。例如,我们确实有一个“常见问题”(faq)标签,但无法选中它。我也尝试直接输入标签名称,但同样无效。
2 个赞
JimPas
13
您已在仪表板中启用标签功能了吗?它位于“设置/标签”下。标签列表顶部的第一个复选框用于启用标签。之后,您创建的任何标签都应能正常工作。
1 个赞
oca
15
设置参数不知道存在哪些标签。您需要在此处写入标签名称,点击 create: 'faq',这样标签名称就会被选中。您可以选择任意数量的标签,只要其中任意一个标签匹配,帖子就会显示出来。
请注意,如果您的账户具有管理员权限,那么它对每个类别都拥有完全权限。但隐藏类别是通过检查账户是否能够有效创建新帖子来实现的。您的账户可以创建,因此您的账户将能够看到所有类别中的所有帖子。为了测试该组件,我建议您创建一个测试账户,以查看普通用户所看到的内容。
2 个赞
debryc
(Deborah Chang)
16
谢谢。我相信我已经让它运行起来了,非常期待接下来的进展。感谢你的辛勤工作。
2 个赞