Tonja
(Tonja)
1
我们使用一种深层的两级分类结构(我们城市的所有公共图书馆及其各自的分支,外加一个拥有自己顶级分类的中心图书馆)。最近,我们需要在某些分类分支中引入第三级嵌套。
一旦树中的任何分类拥有孙级分类,分类主页就会切换其渲染模式:不再显示紧凑的方块网格(父分类及其直接子分类列在其中),而是将所有分类渲染为长长的单列列表。这使得主页变得极长,对于我们 ~1,200 名员工用户来说很难快速浏览。
这似乎由相关讨论中描述的 isGrandParent 属性控制:When you add an additional nesting level, all categories, including child categories, are displayed on the categories page
我们希望实现的效果
我们的首选方案:即使分类拥有第三级嵌套,也能保持标准的“方块”主页布局——例如,通过简单地在主页上不显示孙级分类(它们仍可通过父分类页面访问)。
或者,在分类主页上直接提供原生的、可展开/折叠的分类视图,以便用户仅展开他们需要的分支,而不是将所有内容平铺列出。
为什么我们要求原生/官方解决方案
我们知道存在主题组件/CSS 或 JS 的变通方法(例如,通过 modifyClass 覆盖 isGrandParent),这些方法在上述旧讨论中已有提及。我们更倾向于不采用这种方法:我们内部缺乏深入的前端专业知识,并且担心如果自行覆盖核心渲染逻辑,会在未来的 Discourse 更新中出现意外的副作用或破坏。受支持的设置或官方选项对我们来说长期维护会更安全。
我们知道 Discourse 并不正式推荐深层嵌套,但对于我们的组织结构(多个机构,每个机构有多个物理位置,每个位置都需要自己的空间)来说,这是不可或缺的。
一种受支持的、用于控制这些情况主页显示的方法将大有帮助。我们相信,自 2021 年以来,其他组织可能也有隐藏第三级分类的需求,对吗?
附件截图:我们当前的两级主页布局
以及引入第三级后当前出现问题的样子。
5 个赞
Heliosurge
(Dan DeMontmorency)
2
我不太确定,但这个 Customization > Theme component 主题组件或许能实现你想要的效果,或者稍作修改后就能行。DeV(开发团队)也可能愿意添加这个功能。
1 个赞
这是一个合理的需求,因为如果只有少数几个分类,却包含多层子分类,那么 /categories 页面的布局确实很难平衡。
我们真的不希望大家再使用 modifyClass,因为正如你所说,维护这类覆盖规则可能需要一定的开发工作量。
现在我们有一些更新的自定义方法,更容易保持稳定性。在这种情况下,值转换器(value transformer)可以帮助解决这个问题。我刚刚添加了一个,很快将在更新中可用:DEV: Add a category-list-subcategories value transformer - Pull Request #42804 - discourse/discourse - GitHub
一个简单的演示如下:
api.registerValueTransformer(
"category-list-subcategories",
({ value, context }) =>
context.page === "categories" && context.category.level >= 1 ? [] : value
);
这将只显示一层子分类。现在使用转换器还有其他可用的选项,因此我制作了一个主题组件,我们可以对其进行维护以支持这些功能。
因此,一旦 Discourse 更新,你可以安装此组件来控制 /categories 页面以及其他一些分类列表中显示的子分类数量:
将 Categories page depth 设置为 2,以隐藏所有孙级分类。
2 个赞
Tonja
(Tonja)
4
嘿,非常感谢!
你能预测一下二级类别会怎么表现吗?比如,它们会不会在彼此旁边恢复到原来的顺序?
1 个赞
是的,顺序将保持不变……这实际上是一种受支持的重写 isGrandParent 的方式。
以下是我测试站点的前后对比
3 个赞