Número total de tópicos / Tópicos por mês na página da categoria

A resposta curta é que você — como administrador — tem uma lista de categorias diferente. Como administrador, você tem acesso a categorias privadas. Digo “administrador” aqui para simplificar, mas isso também se aplica aos usuários regulares que têm acesso a categorias privadas. Portanto, o número total de categorias na sua lista é maior. Observe que estou falando apenas de categorias, não de subcategorias. Por enquanto, você pode ignorar as subcategorias.

Então, como isso se relaciona com o fato de o Discourse mostrar 2 / semana, 17 / mês ou 4,4k?

O objetivo é indicar atividade e, para torná-la mais relevante, leva em conta o número total de categorias que você tem acesso.

Então, como toda essa mágica funciona? Vamos começar com algumas informações básicas que o Discourse armazena para cada categoria. Cada categoria tem essas quatro propriedades:

topics_day: 12
topics_month: 95
topics_week: 53
topics_year: 874
topics_all_time: 13982

Cada uma representa o número de novos tópicos criados na categoria ou em uma de suas subcategorias dentro desse período. Vamos ignorar os períodos de dia e ano porque eles são irrelevantes aqui.

Vamos analisar algum código:

discourse/app/assets/javascripts/discourse/app/models/category-list.js at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

e vamos nos concentrar especificamente nesta parte

O que está acontecendo aqui? Bem, começamos com o all (todos) como período padrão. Depois, vemos minCategories.

minCategories aqui é o fator decisivo para o que descrevi acima. É um número mágico, por assim dizer. Em resumo, ele pega o número de categorias de primeiro nível disponíveis para você e multiplica por 0,66.

Então, digamos que você tenha 5 categorias. Multiplicamos isso por 0,66 e obtemos 7,92.

Em seguida, o Discourse percorre cada categoria e verifica a propriedade topics_week. Se ela tiver novos tópicos esta semana, ela é considerada ativa para a semana e conta como 1. O Discourse então soma o número de categorias consideradas ativas. Esse número é então comparado ao 7,92 que obtivemos acima.

Você pode ver isso aqui:

if (filteredCategories.length >= minCategories) {
  statPeriod = period;
  return true;
}

Se o número for maior que 7,92 (8 ou mais categorias ativas esta semana), o Discourse mostrará 11 / semana ao lado de cada categoria, se aplicável.

Bem, e se o número de categorias ativas na semana for menor que 7,92? O Discourse verificará o mesmo, mas com a atividade mensal.

Se o número for maior que 7,92 (8 ou mais categorias ativas este mês), o Discourse mostrará 22 / mês ao lado de cada uma dessas categorias, se aplicável.

Se nem o número semanal nem o mensal de categorias ativas for maior que 7,92, o Discourse retornará ao período padrão all (todos) e mostrará o número topics_all_time ou 4,4k, como na sua captura de tela.

Nota: Além dos períodos semana/mês, se aplicáveis, o total ou all (todos) é sempre exibido no celular.

Então, vamos tentar descobrir o problema em sua publicação. Um novo usuário vê 22 / mês e você, como administrador, vê 4,4k. O que está acontecendo?

Bem, lembra disso?

A resposta curta é que você — como administrador — tem uma lista de categorias diferente. Como administrador, você tem acesso a categorias privadas.

Então, vamos fazer algumas contas…

Seu site tem 7 categorias de primeiro nível visíveis para nosso usuário novo de exemplo. Portanto, o número mágico é:

7 * 0,66 = 4,62

Em outras palavras, você precisa ter 5 categorias com novos tópicos esta semana para que o Discourse mostre 11 / semana. Isso não é o caso no seu site, já que você tem apenas 4 que atendem aos critérios — lembre-se, são novos tópicos, não respostas.

Assim, o Discourse verifica a atividade mensal e, no seu caso, você tem 6 categorias que tiveram novos tópicos este mês. 6 é maior que 4,62, então nosso usuário de exemplo vê 4 / mês, como na sua captura de tela.

Agora, vamos fazer as contas para você, como administrador. Eu não sei quantas categorias privadas você tem, mas vamos assumir que você tenha 4 categorias privadas. Nesse caso, o número total seria de 11 categorias, e o número mágico seria:

11 * 0,66 = 7,26

Então, para você ver 11 / semana, você precisaria de pelo menos 8 categorias com novos tópicos esta semana. Se não for o caso, ele retornará à atividade mensal, e você precisaria de pelo menos 8 categorias com novos tópicos este mês para ver 4 / mês. Se nenhuma dessas condições for atendida, você verá 4,4k, como na sua captura de tela de administrador.

Dito isso, o número mágico no Discourse — 0,66 — parece um pouco alto e pode se beneficiar de uma redução para acomodar sites com um grande número de categorias moderadamente ativas. 40% das categorias do site estando ativas ainda é bastante decente. Você também pode tentar a sorte e pedir uma configuração de site para controlar isso em um tópico Contribute > Feature.

Caso contrário, você pode contornar tudo isso em um componente de tema. Algo como isso na guia de cabeçalho comum do seu tema.

<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;

  // a categoria é considerada ativa se tiver pelo menos este número de tópicos esta semana
  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>

A única coisa que você precisa alterar é WEEK_THROSHOLD para o número de novos tópicos criados esta semana em uma categoria no qual ela é considerada ativa. O resto deve funcionar normalmente.