일반적으로 템플릿 전체를 오버라이드하는 것은 유지보수가 필요하기 때문에 피해야 합니다. Discourse 업데이트가 테마를 깨뜨리면 diff를 실행하여 무엇이 변경되었는지 확인해야 하므로, 대신 템플릿에 전달되는 데이터를 수정하는 방식으로 접근하는 것이 좋습니다.
topic-list-item은 Ember 컴포넌트이므로, 원하는 변경 사항을 적용하기 위해 api.modifyClass를 사용할 수 있습니다.
예를 들어, 아래 스니펫은 서브카테고리 토픽의 제목 아래에 상위 카테고리 배지를 표시합니다. 토픽이 메인 카테고리에 있는 경우 이 코드는 아무 효과도 없습니다.
<script type="text/discourse-plugin" version="0.8">
const { on } = require("discourse-common/utils/decorators");
// parent category ids
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>