Plugin de gamification Discourse dans l'en-tête

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é.

1 « J'aime »

donnez-moi au moins un exemple HTML pour les évaluations des utilisateurs

Peut-être ceci ?

« 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. »

Ceci prend en charge juste en dessous de l’en-tête et aussi la route de sujet

Mais vous pourriez avoir besoin de construire le composant vous-même.

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.

L’emplacement de cet élément de bannière/en-tête serait par mois, trimestre, jour, semaine, année ou tout le temps ?

Voici l’API d’en-tête actuelle :

Mais vous voudrez probablement simplement attacher un composant à une sortie.

before-header-panel semble être une bonne option.

1 « J'aime »

L'image montre l'écran d'un smartphone avec une application de calculatrice ouverte, affichant le nombre « 100 », ainsi que des icônes pour la parole et la recherche. (Sous-titré par l'IA)

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.

Il sera basé sur le total des points gagnés sur toute la durée.

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 ! :smiley:

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.

1 « J'aime »

Je suis désolé. Je pensais que vous ne me compreniez pas parce que mon anglais était mauvais. Je me sentais mal.

2 « J'aime »

3a
le travail est terminé

4 « J'aime »

Cela vous dérangerait de partager comment vous avez accompli cela ?

J’ai créé un nouveau composant. J’ai utilisé l’API pour les points. J’ai déplacé la section utilisateur sur la page d’accueil.

C’est une méthode temporaire mais utile. Peut-être veulent-ils l’améliorer, je laisse le code ici

Site Web de test : 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("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));
    });
});
4 « J'aime »

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