Plugin de Gamificação do Discourse no Cabeçalho

Olá, estou tentando fazer algo. Quero exibir os pontos do usuário do plugin Discourse Gamification no topo do site. Por exemplo, se um usuário chamado Adam tem 700 pontos, como posso mostrar isso na seção do cabeçalho? Onde devo colocar o código?

Quero que o usuário veja seus próprios pontos.
Atenciosamente!

Esta solicitação é excelente; também estou curioso para saber a resposta.
Acredito que se cada usuário pudesse ver seus pontos de contribuição sob sua tag de nome, isso aumentaria muito o engajamento da comunidade.

1 curtida

pelo menos me dê um exemplo de HTML para avaliações de usuários

Talvez isto?

“Quero mover os Pontos de Torcida dos cartões de usuário para o topo da página inicial. O usuário deve ser capaz de ver sua pontuação. Essas pontuações são retiradas da tabela de classificação.”

Isso suporta logo abaixo do cabeçalho e também a Rota de Tópico

Mas você pode precisar construir o Componente você mesmo.

Quero mover os Pontos de Torcida dos cartões de usuário para o topo da página inicial. O usuário deve poder ver sua pontuação. Essas pontuações são retiradas da classificação.

A colocação deste item de banner/cabeçalho seria por mês, trimestre, dia, semana, ano ou todo o tempo?

Aqui está a API de cabeçalho atual:

Mas você provavelmente só quer anexar um Componente a um ponto de saída

before-header-panel parece ser uma boa opção.

1 curtida

A imagem mostra a tela de um smartphone com um aplicativo de calculadora aberto, exibindo o número "100" e ícones de fala e pesquisa. (Legenda por IA)

Não, senhor. O usuário só deve ver sua pontuação no cabeçalho. Preciso adicionar ao cabeçalho a seção que é adicionada ao cartão do perfil. Essa pontuação é obtida na tabela de classificação, que reflete os pontos ganhos com a tarefa.

será baseado no total de pontos ganhos em todos os tempos.

Cada usuário deve ver sua pontuação na seção do cabeçalho na página inicial. Se houver um código ou método para fazer isso, por favor, me avise. Tenho lutado por 14 horas e estou brigando com meu gato! :smiley:

Existem muitos exemplos de Componentes. Veja as bases de código de Theme component para ver exemplos de Componentes Glimmer .gjs e observe como eles são anexados a Plugin Outlets.

@merefield estava se referindo a como você poderia construir este componente. A questão é que este não é um recurso, então ele terá que ser feito como um Componente de Tema.

1 curtida

Sinto muito. Pensei que você não me entendia porque meu inglês era ruim. Eu me senti mal.

2 curtidas

3a
o trabalho está feito

4 curtidas

Você se importaria de compartilhar como você realizou isso?

Criei um novo componente. Usei a API para os pontos. Movi a seção do usuário para a página inicial.

É um método temporário, mas útil. Talvez eles queiram melhorá-lo, deixo o código aqui

Site de teste: https://trgala.com

Js

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer("0.8", (api) => {
    api.onPageChange(() => {
        const currentUser = api.getCurrentUser();
        if (!currentUser) {
            console.warn("Usuário não logado");
            return;
        }

        fetch(`/u/${currentUser.username}.json`)
            .then(response => response.json())
            .then(data => {
                console.log("Dados de Gamificação:", data);
                let score = data?.user?.gamification_score ?? 0;

                // Se a caixa de pontuação já existir, não adicione novamente
                if (document.querySelector("#gamification-score")) return;

                // Encontre o contêiner .contents do cabeçalho
                let headerContents = document.querySelector(".d-header>.wrap .contents");
                if (headerContents) {
                    // Crie o contêiner de pontuação
                    let scoreContainer = document.createElement("a");
                    scoreContainer.id = "gamification-score";
                    scoreContainer.classList.add("gamification-box");
                    scoreContainer.href = "website";
                    scoreContainer.target = "_blank"; // Abrir em nova aba

                    // Ícone de ouro
                    let icon = document.createElement("span");
                    icon.innerText = "T";
                    icon.classList.add("gold-icon");

                    // Texto da pontuação
                    let scoreText = document.createElement("span");
                    scoreText.innerText = `${score}`;
                    scoreText.classList.add("gold-text");

                    // Adicione o ícone e o texto à caixa
                    scoreContainer.appendChild(icon);
                    scoreContainer.appendChild(scoreText);

                    // Adicione a caixa ao cabeçalho
                    headerContents.appendChild(scoreContainer);
                }
            })
            .catch(error => console.error("Erro ao buscar pontuação de gamificação:", error));
    });
});
4 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.