간단히 말하면, 관리자이신 여러분은 다른 카테고리 목록을 보게 됩니다. 관리자는 비공개 카테고리에 접근할 수 있습니다. 여기서는 간단히 설명하기 위해 '관리자’라고 했지만, 비공개 카테고리에 접근 권한이 있는 일반 사용자들에게도 동일하게 적용됩니다. 따라서 여러분 목록에 표시되는 카테고리 총수가 더 많습니다. 참고로 여기서 말하는 것은 카테고리이며, 하위 카테고리는 아닙니다. 지금은 하위 카테고리는 무시하셔도 됩니다.
그렇다면 이것이 Discourse가 2 / 주 또는 17 / 월 또는 4.4k를 표시하는 것과 어떻게 관련이 있을까요?
이것은 활동성을 나타내는 지표로 설계되었으며, 관련성을 높이기 위해 여러분이 접근할 수 있는 카테고리 총수를 고려합니다.
그렇다면 이 모든 마법이 어떻게 작동할까요? Discourse가 각 카테고리에 대해 저장하는 기본 정보부터 시작해 보겠습니다. 각 카테고리에는 다음 네 가지 속성이 있습니다:
topics_day: 12
topics_month: 95
topics_week: 53
topics_year: 874
topics_all_time: 13982
각 값은 해당 기간 동안 해당 카테고리나 그 하위 카테고리에서 생성된 새 토픽의 수를 나타냅니다. 여기서는 관련이 없는 '일(day)'과 ‘연(year)’ 기간은 무시합시다.
다음 코드를 살펴봅시다:
특히 이 부분에 집중해 보겠습니다.
여기서 무슨 일이 일어나고 있을까요? 기본적으로 all을 기본 기간으로 시작합니다. 그리고 minCategories를 확인합니다.
여기서의 minCategories는 위에서 설명한 것을 결정하는 핵심 요소입니다. 일종의 마법 숫자라고 할 수 있습니다. 영어로 설명하자면, 여러분이 접근할 수 있는 최상위 카테고리의 수를 0.66과 곱하는 것입니다.
예를 들어 5개의 카테고리가 있다고 가정해 보겠습니다. 이를 0.66과 곱하면 7.92가 됩니다.
그 후, Discourse는 각 카테고리를 순회하며 topics_week 속성을 확인합니다. 이번 주에 새 토픽이 있다면 해당 카테고리는 주간 활동성 있는 것으로 간주되며 1로 집계됩니다. Discourse는 활동성 있는 것으로 간주된 카테고리의 수를 합산합니다. 이 숫자는 위에서 구한 7.92와 비교됩니다.
여기서 이를 확인할 수 있습니다.
if (filteredCategories.length >= minCategories) {
statPeriod = period;
return true;
}
이 숫자가 7.92보다 크다면(즉, 이번 주에 활동성 있는 카테고리가 8개 이상이라면), Discourse는 해당 카테고리에 적용 가능한 경우 11 / 주를 표시합니다.
그렇다면 주간 활동성 있는 카테고리의 수가 7.92보다 작다면 어떻게 될까요? Discourse는 월간 활동성을 기준으로 같은 검사를 수행합니다.
이 숫자가 7.92보다 크다면(즉, 이번 달에 활동성 있는 카테고리가 8개 이상이라면), Discourse는 해당 카테고리에 적용 가능한 경우 22 / 월을 표시합니다.
주간 또는 월간 활동성 있는 카테고리 수가 모두 7.92보다 작다면, Discourse는 기본 기간인 all로 되돌아가며 topics_all_time 숫자, 즉 스크린샷과 같이 4.4k를 표시합니다.
참고: week/month 기간 외에도, 적용 가능한 경우 모바일에서는 항상 전체(all) 수치가 표시됩니다.
자, 이제 여러분 게시글의 문제를 파악해 보겠습니다. 신규 사용자는 22 / 월을 보지만, 관리자이신 여러분은 4.4k를 보고 있습니다. 무엇이 문제일까요?
이것을 기억하시나요?
간단히 말하면, 관리자이신 여러분은 다른 카테고리 목록을 보게 됩니다. 관리자는 비공개 카테고리에 접근할 수 있습니다.
자, 계산을 해 보겠습니다…
여러분의 사이트에는 예시 신규 사용자에게 보이는 최상위 카테고리가 7개 있습니다. 따라서 마법 숫자는 다음과 같습니다.
7 * 0.66 = 4.62
즉, Discourse가 11 / 주를 표시하려면 이번 주에 새 토픽이 있는 카테고리가 5개여야 합니다. 하지만 여러분의 사이트에서는 이 조건을 충족하는 카테고리가 4개뿐이므로 해당되지 않습니다. (참고: 여기서는 새 토픽을 의미하며, 답변은 아닙니다.)
따라서 Discourse는 월간 활동성을 확인합니다. 여러분의 경우, 이번 달에 새 토픽이 있는 카테고리가 6개 있습니다. 6은 4.62보다 크므로, 예시 사용자는 스크린샷과 같이 4 / 월을 보게 됩니다.
이제 여러분을 위한 계산을 해 보겠습니다. 비공개 카테고리가 몇 개인지는 알 수 없지만 4개라고 가정해 보겠습니다. 이 경우 총 카테고리 수는 11개가 되며, 마법 숫자는 다음과 같습니다.
11 * 0.66 = 7.26
따라서 11 / 주를 보려면 이번 주에 새 토픽이 있는 카테고리가 최소 8개여야 합니다. 그렇지 않으면 월간 활동성으로 되돌아가며, 4 / 월을 보려면 이번 달에 새 토픽이 있는 카테고리가 최소 8개여야 합니다. 이 두 조건 중 어느 것도 충족되지 않으면, 관리자 스크린샷과 같이 4.4k가 표시됩니다.
결론적으로, Discourse의 마법 숫자인 0.66은 다소 높은 것으로 보이며, 중간 정도 활동성을 가진 카테고리가 많은 사이트를 위해 낮추는 것이 유리할 수 있습니다. 사이트 카테고리의 40%가 활동성 있는 것은 여전히 꽤 괜찮은 수치입니다. 또한 Contribute > Feature 토픽에서 해당 값을 제어할 수 있는 사이트 설정을 요청해 볼 수도 있습니다.
그렇지 않을 경우, 테마 구성 요소를 사용하여 이 모든 것을 우회할 수 있습니다. 테마의 공통 헤더 탭에 다음과 같은 코드를 추가해 보세요.
<script type="text/discourse-plugin" version="0.8">
const { on } = require("discourse-common/utils/decorators");
const { number } = require("discourse/lib/formatter");
const I18n = require("I18n").default;
// category is considered active if it had at least this many topics this week
const WEEK_THROSHOLD = 2;
api.modifyClass("component:parent-category-row", {
pluginId: "category-activity-indicator",
@on("didReceiveAttrs")
setCategoryActivityStats() {
const category = this.category;
if (category.topics_week < WEEK_THROSHOLD) {
return;
}
const statPeriod = "week";
const stat = category[`topics_${statPeriod}`];
const unit = I18n.t(`categories.topic_stat_unit.${statPeriod}`);
category.setProperties({
pickAll: false,
stat: I18n.t("categories.topic_stat", {
count: stat,
number: `<span class="value">${number(stat)}</span>`,
unit: `<span class="unit">${unit}</span>`,
}),
statTitle: I18n.t(`categories.topic_stat_sentence_${statPeriod}`, {
count: stat,
}),
});
},
});
</script>
변경해야 하는 것은 WEEK_THROSHOLD만입니다. 이 값은 카테고리에서 이번 주에 생성된 새 토픽의 수 중 활동성 있는 것으로 간주되는 임계값입니다. 나머지는 그대로 작동할 것입니다.
