Como exibir o total de posts do usuário ao lado do nome

Olá a todos, este é o meu primeiro post aqui. Estou me perguntando como o fórum da Blizzard mostra a contagem total de posts de um usuário ao lado do nome dele.


Eu implementei algo semelhante no meu fórum usando o sistema de API do Discourse como abaixo

Mas acredito que existam maneiras melhores de fazer isso. Também estou planejando mostrar o emblema do usuário, etc. Alguém pode me ajudar com isso? Obrigado.

1 curtida

Estou me perguntando se existe algum sistema de template/shortcode.

Oi!

Se você estiver usando a API, acredito que esta seja a maneira correta.

Você poderia compartilhar seu código conosco? Podemos fornecer sugestões de melhoria, se necessário. :slight_smile:

1 curtida

Certo

<script type="text/discourse-plugin" version="0.1">
  api.onPageChange(() => {
    // Verifica se um elemento com o ID 'topic' existe
    if ($('#topic').length > 0) {
      // Se o elemento 'topic' existir, encontra o atributo 'data-user-id'
      var userId = $('#topic article').data('user-id');

      // Verifica se o atributo 'data-user-id' existe
      if (userId !== undefined) {
        // Faz uma requisição à API para obter informações do usuário
        apiReq(`admin/users/${userId}.json`, 'GET')
          .then(data => {
            // Lida com os dados da resposta
            console.log('Contagem de posts do usuário:', data.post_count);

            // Verifica se o usuário tem um valor em user_fields["1"]
            if (data.user_fields && data.user_fields["1"]) {
              // Exibe o campo do usuário dentro da primeira div 'names'
              displayUserField(data.user_fields["1"]);
            }

            // Exibe a contagem de posts dentro da primeira div 'names'
            displayPostCount(data.post_count);
          })
          .catch(error => {
            // Lida com erros
            console.error('Erro na requisição da API:', error);
          });
      } else {
        console.log('Nenhum atributo data-user-id encontrado');
      }
    } else {
      console.log('Nenhum elemento com o ID "topic" encontrado');
    }
  });

  // Função para exibir o campo do usuário dentro da primeira div 'names'
  function displayUserField(userFieldValue) {
    // Encontra a primeira div 'names'
    var firstNamesDiv = $('.names:first');

    // Cria um elemento span com as classes 'user-title'
    var userFieldSpan = $('<span></span>').addClass('user-title');
    userFieldSpan.text(userFieldValue);

    // Anexa o elemento span à primeira div 'names'
    firstNamesDiv.append(userFieldSpan);
  }

  // Função para exibir a contagem de posts dentro da primeira div 'names'
  function displayPostCount(postCount) {
    // Encontra a primeira div 'names'
    var firstNamesDiv = $('.names:first');

    // Cria um elemento span com as classes 'user-title'
    var postCountSpan = $('<span></span>').addClass('user-title');
    postCountSpan.text(postCount + ' posts');

    // Anexa o elemento span de contagem de posts à primeira div 'names'
    firstNamesDiv.append(postCountSpan);
  }

</script>

A função apiReq está em outro componente

No Blizzard, eles estão mostrando a contagem de postagens ao lado dos comentaristas, o que eu não consegui alcançar.

Entendi, você usa a API parcialmente. Você pode definitivamente melhorar este código. Me dê alguns minutos e eu volto com você.

2 curtidas

Parece bom. Sou novo no Discourse, é por isso que sei muito pouco sobre ele.

1 curtida

Tive que criar um plugin em vez disso.

Para obter o valor de post_count ao visualizar uma postagem ou o cartão de um usuário, é necessário serializar os dados para incluir este campo. Isso só pode ser alcançado com a ajuda de um plugin e depender de requisições por usuário não é uma solução realista.

Experimente. A parte JS está em assets se você quiser dar uma olhada.
Uma coisa específica que você pode ter perdido ao usar a API é a capacidade de personalizar via outlets.

Me diga se você quiser mais opções.
Não sei se devo lançar este plugin, pois é pequeno, mas aqui vamos nós de qualquer maneira:

5 curtidas

Muito obrigado pelo esforço. Vou tentar.
Meu plano real era alcançar o seguinte recurso

  1. Mostrar a contagem de postagens do usuário em postagens e comentários ao lado do avatar.
  2. Atribuir um título padrão a todos os membros de um grupo (ex: Administrador)
  3. Mostrar o nível de confiança ao lado do avatar
  4. Mostrar o distintivo ao lado do avatar.
  5. Mostrar um valor de campo de usuário ao lado do avatar.
    E as opções são alteráveis pelo administrador.
    Também planejei hiperlinkar a contagem de postagens para que outros possam clicar e ver a lista de postagens.

Embora seja um pequeno plugin, acredito que vale a pena publicá-lo. Você pode considerar adicionar novos recursos conforme sugerido.
Obrigado

Instalei o plugin, mas ele não funciona.

Eu testei novamente e está funcionando bem do meu lado.

O plugin está ativado?

1 curtida

Está funcionando agora. Obrigado.

Desculpe incomodar novamente. Após usar por um tempo, notei que não inclui tópicos. Pelo que sei, um tópico também é uma postagem.

Tópicos criados é outra estatística. Você quer adicionar essa contagem à contagem de posts ou adicionar um novo texto para que você tenha " tópicos: xx, posts: yy "?

Na verdade, estou tentando obter algo como postCount + TopicCount
simplesmente quero contar tópicos como posts.
Também estou tentando mostrar isso após o título do usuário (se houver algum). Tentei modificar o código do plugin (depois de fazer um fork), mas ainda não tive sorte.

Atualizei o plugin; me avise se funcionar para você.

2 curtidas

Muito obrigado. Funcionou.

Parece muito legal. É possível adicionar o total de reações + ícones FA também?

Não consigo editar, então, acabei de instalar e testei o plugin, e ele está funcionando muito bem. Exceto no celular, onde o número total de posts está sendo exibido no lado esquerdo do nome. :frowning:

@David_Ghost

Você pode corrigi-lo com um pouco de CSS:

.names.trigger-user-card > div:has(.user-post-user__container) {
    order: 2;
}
2 curtidas