Wie man die Gesamtzahl der Beiträge eines Benutzers neben dem Namen anzeigt

Hallo zusammen, dies ist mein erster Beitrag hier. Ich frage mich, wie das Blizzard-Forum die Gesamtzahl der Beiträge eines Benutzers neben seinem Namen anzeigt.


Ich habe etwas Ähnliches in meinem Forum implementiert, indem ich das Discourse API-System wie unten verwendet habe

Aber ich glaube, es gibt bessere Möglichkeiten, dies zu tun. Ich habe auch vor, die Benutzer-Badges usw. anzuzeigen. Kann mir jemand dabei helfen? Danke.

1 „Gefällt mir“

Ich frage mich, ob es ein Vorlagen-/Shortcode-System gibt.

Hallo!

Wenn Sie die API verwenden, glaube ich, dass dies der richtige Weg ist.

Könnten Sie bitte Ihren Code mit uns teilen? Wir können bei Bedarf Verbesserungsvorschläge machen. :slight_smile:

1 „Gefällt mir“

Sicher

<script type="text/discourse-plugin" version="0.1">
  api.onPageChange(() => {
    // Prüfen, ob ein Element mit der ID 'topic' existiert
    if ($('#topic').length > 0) {
      // Wenn das 'topic'-Element existiert, das Attribut 'data-user-id' finden
      var userId = $('#topic article').data('user-id');

      // Prüfen, ob das Attribut 'data-user-id' existiert
      if (userId !== undefined) {
        // Eine API-Anfrage machen, um Benutzerinformationen zu erhalten
        apiReq(`admin/users/${userId}.json`, 'GET')
          .then(data => {
            // Die Antwortdaten verarbeiten
            console.log('Anzahl der Beiträge des Benutzers:', data.post_count);

            // Prüfen, ob der Benutzer einen Wert in user_fields["1"] hat
            if (data.user_fields && data.user_fields["1"]) {
              // Das Benutzerfeld im ersten 'names'-Div anzeigen
              displayUserField(data.user_fields["1"]);
            }

            // Die Anzahl der Beiträge im ersten 'names'-Div anzeigen
            displayPostCount(data.post_count);
          })
          .catch(error => {
            // Fehler behandeln
            console.error('API-Anfragefehler:', error);
          });
      } else {
        console.log('Kein Attribut mit data-user-id gefunden');
      }
    } else {
      console.log('Kein Element mit der ID "topic" gefunden');
    }
  });

  // Funktion zum Anzeigen des Benutzerfeldes im ersten 'names'-Div
  function displayUserField(userFieldValue) {
    // Das erste 'names'-Div finden
    var firstNamesDiv = $('.names:first');

    // Ein Span-Element mit den Klassen 'user-title' erstellen
    var userFieldSpan = $('<span></span>').addClass('user-title');
    userFieldSpan.text(userFieldValue);

    // Das Span-Element an das erste 'names'-Div anhängen
    firstNamesDiv.append(userFieldSpan);
  }

  // Funktion zum Anzeigen der Beitragsanzahl im ersten 'names'-Div
  function displayPostCount(postCount) {
    // Das erste 'names'-Div finden
    var firstNamesDiv = $('.names:first');

    // Ein Span-Element mit den Klassen 'user-title' erstellen
    var postCountSpan = $('<span></span>').addClass('user-title');
    postCountSpan.text(postCount + ' Beiträge');

    // Das Span-Element für die Beitragsanzahl an das erste 'names'-Div anhängen
    firstNamesDiv.append(postCountSpan);
  }

</script>

Ich habe die apiReq-Funktion in einer anderen Komponente

In Blizzard wird die Anzahl der Beiträge neben den Kommentatoren angezeigt, was ich nicht erreichen konnte.

Ich verstehe, Sie nutzen die API teilweise. Sie können diesen Code definitiv verbessern. Geben Sie mir ein paar Minuten, und ich melde mich wieder bei Ihnen.

2 „Gefällt mir“

Klingt gut. Ich bin neu bei Discourse, deshalb weiß ich nur sehr wenig darüber.

1 „Gefällt mir“

Ich musste stattdessen ein Plugin erstellen.

Um den post_count-Wert beim Anzeigen eines Beitrags oder der Karte eines Benutzers zu erhalten, ist es notwendig, die Daten zu serialisieren, um dieses Feld einzuschließen. Dies kann nur mit Hilfe eines Plugins erreicht werden und die Abhängigkeit von Anfragen pro Benutzer ist keine realistische Lösung.

Probieren Sie es aus. Der JS-Teil befindet sich in assets, wenn Sie ihn sich ansehen möchten.
Eine spezielle Sache, die Sie bei der Verwendung der API möglicherweise übersehen haben, ist die Möglichkeit zur Anpassung über outlets.

Lassen Sie mich wissen, wenn Sie weitere Optionen wünschen.
Ich weiß nicht, ob ich dieses Plugin veröffentlichen soll, da es klein ist, aber hier ist es trotzdem:

5 „Gefällt mir“

Vielen Dank für Ihre Bemühungen. Ich werde es versuchen.
Mein eigentlicher Plan war es, die folgende Funktion zu erreichen:

  1. Zeigen Sie die Beitragsanzahl des Benutzers in Beiträgen und Kommentaren neben dem Avatar an.
  2. Weisen Sie allen Mitgliedern einer Gruppe einen Standardtitel zu (z. B. Administrator).
  3. Zeigen Sie die Vertrauensstufe neben dem Avatar an.
  4. Zeigen Sie eine Auszeichnung neben dem Avatar an.
  5. Zeigen Sie einen Benutzerfeldwert neben dem Avatar an.
    Und Optionen sind vom Administrator änderbar.
    Ich habe auch geplant, die Beitragsanzahl zu verlinken, damit andere darauf klicken und die Liste der Beiträge sehen können.

Obwohl es ein kleines Plugin ist, glaube ich, dass es sich lohnt, es zu veröffentlichen. Sie können erwägen, neue Funktionen wie vorgeschlagen hinzuzufügen.
Vielen Dank

Ich habe das Plugin installiert, aber es funktioniert nicht.

Ich habe es noch einmal getestet, und es funktioniert auf meiner Seite einwandfrei.

Ist das Plugin aktiviert?

1 „Gefällt mir“

Es funktioniert jetzt. Danke.

Entschuldigen Sie die erneute Störung. Nach einiger Nutzung habe ich festgestellt, dass keine Themen enthalten sind. Soweit ich weiß, ist ein Thema auch ein Beitrag.

Themen erstellt ist eine weitere Statistik. Möchten Sie diese Anzahl zur Beitragsanzahl hinzufügen oder einen neuen Text hinzufügen, sodass Sie “Themen: xx, Beiträge: yy” hätten?

Ich versuche eigentlich, so etwas wie postCount + TopicCount zu erhalten.
Ich möchte einfach Themen als Beiträge zählen.
Ich versuche auch, dies nach dem Benutzertitel (falls vorhanden) anzuzeigen. Ich habe versucht, den Plugin-Code zu ändern (nach dem Forken), aber bisher ohne Erfolg.

Ich habe das Plugin aktualisiert. Lass mich wissen, ob es für dich funktioniert.

2 „Gefällt mir“

Vielen Dank. Es hat funktioniert.

Sieht so cool aus. Ist es möglich, auch die Gesamtreaktionen + FA-Symbole hinzuzufügen?

Ich kann nicht bearbeiten, also habe ich das Plugin gerade installiert und getestet, und es funktioniert sehr gut. Außer auf Mobilgeräten, wo die Gesamtzahl der Beiträge auf der linken Seite des Namens angezeigt wird. :frowning:

@David_Ghost
Sie können es mit etwas CSS beheben:

.names.trigger-user-card > div:has(.user-post-user__container) {
    order: 2;
}
2 „Gefällt mir“