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.
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.
<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
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:
Muito obrigado pelo esforço. Vou tentar.
Meu plano real era alcançar o seguinte recurso
Mostrar a contagem de postagens do usuário em postagens e comentários ao lado do avatar.
Atribuir um título padrão a todos os membros de um grupo (ex: Administrador)
Mostrar o nível de confiança ao lado do avatar
Mostrar o distintivo ao lado do avatar.
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
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.
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.