一般来说,您应避免完全覆盖模板,因为它们需要维护——如果 Discourse 更新导致您的主题出现问题,您必须运行差异比较并检查发生了哪些变化。
您可以退一步,改为修改传递给模板的数据。
topic-list-item 是一个 Ember 组件,因此您可以使用 api.modifyClass 来实现您想要的更改。
例如,以下代码片段将在子分类主题标题下方显示父分类徽章。如果主题位于主分类中,则该代码不会生效。
<script type="text/discourse-plugin" version="0.8">
const { on } = require("discourse-common/utils/decorators");
// 父分类 ID
const targetCategoryIds = [9, 15, 50];
const useParentCategory = function () {
const parentCategory = this.attrs.topic.category.parentCategory;
const switchToParent = parentCategory && targetCategoryIds.includes(parentCategory.id);
if (switchToParent) {
this.attrs.topic.set("category", parentCategory);
}
};
api.modifyClass("component:topic-list-item", {
@on("didReceiveAttrs")
setCategory() {
useParentCategory.call(this);
}
});
api.modifyClass("component:latest-topic-list-item", {
@on("didReceiveAttrs")
setCategory() {
useParentCategory.call(this);
}
});
</script>