Bonjour, j’essaie de faire quelque chose. Je veux afficher les points de l’utilisateur du plugin Discourse Gamification en haut du site. Par exemple, si un utilisateur nommé Adam a 700 points, comment puis-je afficher cela dans la section d’en-tête ? Où dois-je placer le code ?
Je veux en fait que l’utilisateur voie ses propres points.
Cordialement !
Cette requête est excellente ; je suis également curieux de connaître la réponse.
Je pense que si chaque utilisateur pouvait voir ses points de contribution sous son nom, cela améliorerait grandement l’engagement de la communauté.
« Je veux déplacer les Cheer Points des cartes utilisateur en haut de la page d’accueil. L’utilisateur doit pouvoir voir son score. Ces scores sont tirés du classement. »
Je veux déplacer les points Cheer des cartes utilisateur vers le haut de la page d’accueil. L’utilisateur doit pouvoir voir son score. Ces scores sont tirés du classement.
Non monsieur. L’utilisateur ne devrait voir son score que dans l’en-tête. Je dois ajouter à l’en-tête la section qui est ajoutée à la carte de profil. Ce score est obtenu à partir du classement, qui reflète les points gagnés lors de la tâche.
Chaque utilisateur devrait voir son score dans la section d’en-tête sur la page d’accueil. S’il existe un code ou une méthode pour ce faire, veuillez me le faire savoir. Cela fait 14 heures que je lutte, et je me bats avec mon chat !
Il existe de nombreux exemples de Composants. Regardez les bases de code de Theme component pour voir des exemples de Composants Glimmer .gjs et notez comment ils sont attachés aux Points de sortie des Plugins.
@merefield faisait référence à la façon dont vous pourriez construire ce composant. Le fait est qu’il ne s’agit pas d’une fonctionnalité, elle devra donc être réalisée en tant que composant de thème.
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer("0.8", (api) => {
api.onPageChange(() => {
const currentUser = api.getCurrentUser();
if (!currentUser) {
console.warn("L'utilisateur n'est pas connecté");
return;
}
fetch(`/u/${currentUser.username}.json`)
.then(response => response.json())
.then(data => {
console.log("Données de gamification :", data);
let score = data?.user?.gamification_score ?? 0;
// Si la boîte de score existe déjà, ne pas l'ajouter à nouveau
if (document.querySelector("#gamification-score")) return;
// Trouver le conteneur .contents de l'en-tête
let headerContents = document.querySelector(".d-header> .wrap .contents");
if (headerContents) {
// Créer le conteneur de score
let scoreContainer = document.createElement("a");
scoreContainer.id = "gamification-score";
scoreContainer.classList.add("gamification-box");
scoreContainer.href = "website";
scoreContainer.target = "_blank"; // Ouvrir dans un nouvel onglet
// Icône dorée
let icon = document.createElement("span");
icon.innerText = "T";
icon.classList.add("gold-icon");
// Texte du score
let scoreText = document.createElement("span");
scoreText.innerText = `${score}`;
scoreText.classList.add("gold-text");
// Ajouter l'icône et le texte à la boîte
scoreContainer.appendChild(icon);
scoreContainer.appendChild(scoreText);
// Ajouter la boîte à l'en-tête
headerContents.appendChild(scoreContainer);
}
})
.catch(error => console.error("Erreur lors de la récupération du score de gamification :", error));
});
});