我添加了另一层类别嵌套。但是,当向子类别添加子类别时,所有这些类别都会显示在主页上。我计划创建约 100 个类别,这些类别应显示在主页上。每个子类别下包含 30 到 50 个子类别。目前,所有类别都显示在同一个页面上。我没有找到任何设置来隐藏主页上第二层嵌套的类别。
您需要添加“仅显示子类别”的设置,以避免整个类别树都显示在主页上。否则,第二级和第三级嵌套的类别将始终显示在主页上。如果数量达到数千个该怎么办?
我添加了另一层类别嵌套。但是,当向子类别添加子类别时,所有这些类别都会显示在主页上。我计划创建约 100 个类别,这些类别应显示在主页上。每个子类别下包含 30 到 50 个子类别。目前,所有类别都显示在同一个页面上。我没有找到任何设置来隐藏主页上第二层嵌套的类别。
您需要添加“仅显示子类别”的设置,以避免整个类别树都显示在主页上。否则,第二级和第三级嵌套的类别将始终显示在主页上。如果数量达到数千个该怎么办?
通常认为,拥有超过几百个分类并不是一个好主意。不妨看看这篇文章:是时候谈谈标签了。据我所知,子子分类功能在很大程度上不受支持,但也许有办法按你的意愿隐藏它们。
标签的结构化程度不如分类层级。子分类功能早已支持,应单独启用。但整个分类树是可见的。例如,在 NodeBB 中一切正常:页面会显示子分类,但不会显示更深层级的分类。
有人解决过这个问题吗?@Johani,你能帮我吗?
你所寻找的功能是基于模板中的一个名为 isGrandParent 的属性来决定的。
当一个分类拥有孙分类时,我们会渲染相应的孙分类标记;否则,则渲染子分类。
最简单的解决方法是在 parent-category-row Ember 组件中覆盖该属性。
你可以使用 modifyClass 插件 API 方法来实现这一点。
Developing Discourse Themes & Theme Components
modifyClass 允许你重新打开 parent-category-row Ember 组件类并添加新方法。
为了确保这些方法能够执行且数据可用,你需要将它们绑定到 didReceiveAttrs 钩子。
为此,你可以使用内置的 @on 装饰器。
准备好这一切后,你可以简单地通过该组件模板渲染的所有分类来覆盖 isGrandParent,并将它们设置为 false。
以下是整合后的完整代码:
<script type="text/discourse-plugin" version="0.8">
const { on } = require("discourse-common/utils/decorators");
api.modifyClass("component:parent-category-row", {
@on("didReceiveAttrs")
removeGrandchildCategories() {
this.category?.set("isGrandParent", false);
}
});
</script>
将此代码添加到你的主题的 header 标签页下的 common 部分。
这将导致模板仅渲染子分类,而忽略孙分类。
你可以使用相同的模式来修改任何组件中的任何属性。