В целом, следует избегать полной замены шаблонов, так как они требуют поддержки: если обновление Discourse нарушает работу вашей темы, вам придется сравнивать версии (diff) и проверять, что изменилось.
Вместо этого лучше отступить на шаг назад и изменить данные, передаваемые в шаблон.
topic-list-item — это компонент Ember, поэтому вы можете использовать api.modifyClass, чтобы внести нужные изменения.
Например, вот фрагмент кода, который отображает значок родительской категории в темах подкатегорий под заголовком. Если тема находится в основной категории, этот код не окажет никакого эффекта.
<script type="text/discourse-plugin" version="0.8">
const { on } = require("discourse-common/utils/decorators");
// идентификаторы родительских категорий
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>