Comment afficher le nombre total de posts de l'utilisateur à côté du nom

Salut tout le monde, c’est mon premier post ici. Je me demande comment le forum Blizzard affiche le nombre total de posts d’un utilisateur à côté de son nom.


J’ai implémenté quelque chose de similaire sur mon forum en utilisant le système d’API Discourse comme ci-dessous

Mais je pense qu’il existe de meilleures façons de faire cela. Je prévois également d’afficher les badges des utilisateurs, etc. Quelqu’un peut-il m’aider avec cela ? Merci.

1 « J'aime »

Je me demande s’il existe un système de modèles/codes courts.

Salut !

Si vous utilisez l’API, je pense que c’est la bonne méthode.

Pourriez-vous partager votre code avec nous ? Nous pourrons vous faire des suggestions d’amélioration si nécessaire. :slight_smile:

1 « J'aime »

Bien sûr

<script type="text/discourse-plugin" version="0.1">
  api.onPageChange(() => {
    // Vérifier si un élément avec l'ID 'topic' existe
    if ($('#topic').length > 0) {
      // Si l'élément 'topic' existe, trouver l'attribut 'data-user-id'
      var userId = $('#topic article').data('user-id');

      // Vérifier si l'attribut 'data-user-id' existe
      if (userId !== undefined) {
        // Effectuer une requête API pour obtenir les informations de l'utilisateur
        apiReq(`admin/users/${userId}.json`, 'GET')
          .then(data => {
            // Gérer les données de réponse
            console.log('Nombre de publications de l\'utilisateur :', data.post_count);

            // Vérifier si l'utilisateur a une valeur dans user_fields["1"]
            if (data.user_fields && data.user_fields["1"]) {
              // Afficher le champ utilisateur dans la première div 'names'
              displayUserField(data.user_fields["1"]);
            }

            // Afficher le nombre de publications dans la première div 'names'
            displayPostCount(data.post_count);
          })
          .catch(error => {
            // Gérer les erreurs
            console.error('Erreur de requête API :', error);
          });
      } else {
        console.log('Aucun attribut data-user-id trouvé');
      }
    } else {
      console.log('Aucun élément avec l\'ID "topic" trouvé');
    }
  });

  // Fonction pour afficher le champ utilisateur dans la première div 'names'
  function displayUserField(userFieldValue) {
    // Trouver la première div 'names'
    var firstNamesDiv = $('.names:first');

    // Créer un élément span avec les classes 'user-title'
    var userFieldSpan = $('<span></span>').addClass('user-title');
    userFieldSpan.text(userFieldValue);

    // Ajouter l'élément span à la première div 'names'
    firstNamesDiv.append(userFieldSpan);
  }

  // Fonction pour afficher le nombre de publications dans la première div 'names'
  function displayPostCount(postCount) {
    // Trouver la première div 'names'
    var firstNamesDiv = $('.names:first');

    // Créer un élément span avec les classes 'user-title'
    var postCountSpan = $('<span></span>').addClass('user-title');
    postCountSpan.text(postCount + ' posts');

    // Ajouter l'élément span du nombre de publications à la première div 'names'
    firstNamesDiv.append(postCountSpan);
  }

</script>

J'ai la fonction apiReq sur un autre composant

Dans Blizzard, ils affichent le nombre de messages à côté des commentateurs, ce que je n’ai pas réussi à faire.

Je vois, vous utilisez l’API partiellement. Vous pouvez définitivement améliorer ce code. Donnez-moi quelques minutes et je reviens vers vous.

2 « J'aime »

Ça me va. Je suis nouveau sur Discourse, c’est pourquoi j’en sais très peu sur ce sujet.

1 « J'aime »

J’ai dû créer un plugin à la place.

Pour obtenir la valeur post_count lors de la visualisation d’un article ou de la carte d’un utilisateur, il est nécessaire de sérialiser les données pour inclure ce champ. Cela ne peut être réalisé qu’à l’aide d’un plugin et le recours aux requêtes par utilisateur n’est pas une solution réaliste.

Essayez. La partie JS se trouve dans assets si vous souhaitez y jeter un œil.
Une chose spécifique que vous avez peut-être manquée en utilisant l’API est la possibilité de personnaliser via les outlets.

Faites-moi savoir si vous souhaitez plus d’options.
Je ne sais pas si je devrais publier ce plugin car il est petit, mais le voici quand même :

5 « J'aime »

Merci beaucoup pour vos efforts. Je vais essayer.
Mon plan actuel était de réaliser la fonctionnalité suivante :

  1. Afficher le nombre de publications d’un utilisateur dans les publications et les commentaires à côté de son avatar.
  2. Attribuer un titre par défaut à tous les membres d’un groupe (par exemple : Administrateur).
  3. Afficher le niveau de confiance à côté de l’avatar.
  4. Afficher un badge à côté de l’avatar.
  5. Afficher une valeur de champ utilisateur à côté de l’avatar.
    Et les options sont modifiables par l’administrateur.
    J’avais également prévu de lier le nombre de publications pour que d’autres puissent cliquer et voir la liste des publications.

Bien qu’il s’agisse d’un petit plugin, je pense qu’il mérite d’être publié. Vous pourriez envisager d’ajouter de nouvelles fonctionnalités comme suggéré.
Merci.

J’ai installé le plugin mais il ne fonctionne pas.

Je l’ai testé à nouveau, et cela fonctionne bien de mon côté.

Le plugin est-il activé ?

1 « J'aime »

Ça fonctionne maintenant. Merci.

Désolé de vous déranger à nouveau. Après l’avoir utilisé pendant un certain temps, j’ai remarqué qu’il n’inclut pas les sujets. Pour autant que je sache, un sujet est aussi un message.

Sujets créés est une autre statistique. Voulez-vous ajouter ce décompte au décompte des publications ou ajouter un nouveau texte afin d’avoir « sujets : xx, publications : yy » ?

J’essaie en fait d’obtenir quelque chose comme postCount + TopicCount
Je veux simplement compter les sujets comme des messages.
J’essaie également de montrer cela après le titre de l’utilisateur (s’il y en a un). J’ai essayé de modifier le code du plugin (après l’avoir forké) mais sans succès jusqu’à présent.

J’ai mis à jour le plugin ; faites-moi savoir si cela fonctionne pour vous.

2 « J'aime »

Merci beaucoup. Ça a fonctionné.

Ça a l’air super cool. Est-il possible d’ajouter également le total des réactions + les icônes FA ?

Je ne peux pas modifier, donc je viens d’installer et de tester le plugin, et il fonctionne très bien. Sauf sur mobile, où le nombre total de publications s’affiche sur le côté gauche du nom. :frowning:

@David_Ghost
Vous pouvez le corriger avec un peu de CSS :

.names.trigger-user-card > div:has(.user-post-user__container) {
    order: 2;
}
2 « J'aime »