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.
“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.”
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.
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.
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!
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.
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));
});
});