Come mostrare il conteggio totale dei post dell'utente accanto al nome

Ciao a tutti, questo è il mio primo post qui. Mi chiedo come il forum di Blizzard mostri il numero totale di post di un utente accanto al suo nome.


Ho implementato qualcosa di simile nel mio forum utilizzando il sistema API di Discourse come di seguito

Ma credo che ci siano modi migliori per farlo. Ho anche in programma di mostrare il badge dell’utente, ecc. Qualcuno può aiutarmi con questo? Grazie.

1 Mi Piace

Mi stavo chiedendo se esistesse un sistema di template/shortcode.

Ciao!

Se stai usando l’API, credo che questo sia il modo corretto.

Potresti condividere il tuo codice con noi? Possiamo fornire suggerimenti per miglioramenti, se necessario. :slight_smile:

1 Mi Piace
  api.onPageChange(() => {
    // Controlla se esiste un elemento con ID 'topic'
    if ($('#topic').length > 0) {
      // Se l'elemento 'topic' esiste, trova l'attributo 'data-user-id'
      var userId = $('#topic article').data('user-id');

      // Controlla se l'attributo 'data-user-id' esiste
      if (userId !== undefined) {
        // Effettua una richiesta API per ottenere le informazioni dell'utente
        apiReq(`admin/users/${userId}.json`, 'GET')
          .then(data => {
            // Gestisci i dati della risposta
            console.log('Conteggio post utente:', data.post_count);

            // Controlla se l'utente ha un valore in user_fields["1"]
            if (data.user_fields && data.user_fields["1"]) {
              // Visualizza il campo utente nel primo div 'names'
              displayUserField(data.user_fields["1"]);
            }

            // Visualizza il conteggio dei post nel primo div 'names'
            displayPostCount(data.post_count);
          })
          .catch(error => {
            // Gestisci gli errori
            console.error('Errore richiesta API:', error);
          });
      } else {
        console.log('Nessun attributo data-user-id trovato');
      }
    } else {
      console.log('Nessun elemento con ID "topic" trovato');
    }
  });

  // Funzione per visualizzare il campo utente nel primo div 'names'
  function displayUserField(userFieldValue) {
    // Trova il primo div 'names'
    var firstNamesDiv = $('.names:first');

    // Crea un elemento span con classi 'user-title'
    var userFieldSpan = $('<span></span>').addClass('user-title');
    userFieldSpan.text(userFieldValue);

    // Aggiungi l'elemento span al primo div 'names'
    firstNamesDiv.append(userFieldSpan);
  }

  // Funzione per visualizzare il conteggio dei post nel primo div 'names'
  function displayPostCount(postCount) {
    // Trova il primo div 'names'
    var firstNamesDiv = $('.names:first');

    // Crea un elemento span con classi 'user-title'
    var postCountSpan = $('<span></span>').addClass('user-title');
    postCountSpan.text(postCount + ' posts');

    // Aggiungi l'elemento span del conteggio dei post al primo div 'names'
    firstNamesDiv.append(postCountSpan);
  }

Ho la funzione apiReq in un altro componente

In Blizzard, they are showing the post count beside commenters which I couldn’t achieve.

Capisco, utilizzi parzialmente l’API. Puoi sicuramente migliorare questo codice. Dammi qualche minuto e ti farò sapere.

2 Mi Piace

Va bene. Sono nuovo in Discourse, ecco perché ne so molto poco.

1 Mi Piace

Ho dovuto creare un plugin invece.

Per ottenere il valore post_count quando si visualizza un post o la scheda di un utente, è necessario serializzare i dati per includere questo campo. Questo può essere ottenuto solo con l’aiuto di un plugin e fare affidamento sulle richieste per utente non è una soluzione realistica.

Provalo. La parte JS si trova in assets se vuoi dare un’occhiata. Una cosa specifica che potresti aver trascurato nell’uso dell’API è la possibilità di personalizzare tramite outlets.

Fammi sapere se vuoi altre opzioni. Non so se dovrei rilasciare questo plugin dato che è piccolo, ma eccolo qui comunque:

5 Mi Piace

Grazie mille per l’impegno. Ci proverò.
Il mio piano attuale era di realizzare la seguente funzionalità:

  1. Mostra il conteggio dei post dell’utente nei post e nei commenti accanto all’avatar.
  2. Assegna un titolo predefinito a tutti i membri di un gruppo (es: Amministratore)
  3. Mostra il livello di fiducia accanto all’avatar
  4. Mostra un badge accanto all’avatar.
  5. Mostra un valore user_field accanto all’avatar.
    E le opzioni sono modificabili dall’amministratore.
    Ho anche pianificato di collegare il conteggio dei post in modo che altri possano fare clic e vedere l’elenco dei post.

Sebbene sia un piccolo plugin, credo che valga la pena pubblicarlo. Potresti considerare di aggiungere nuove funzionalità come suggerito.
Grazie

Ho installato il plugin ma non funziona.

L’ho testato di nuovo e funziona bene da parte mia.

Il plugin è abilitato?

1 Mi Piace

Ora funziona. Grazie.

Mi dispiace disturbarti ancora. Dopo averlo usato per un po’, ho notato che non include argomenti. Per quanto ne so, un argomento è anche un post.

Argomenti creati è un’altra statistica. Vuoi aggiungere questo conteggio al conteggio dei post o aggiungere un nuovo testo in modo da avere “argomenti: xx, post: yy”?

In realtà sto cercando di ottenere qualcosa come postCount + TopicCount
Voglio semplicemente contare gli argomenti come post.
Sto anche cercando di mostrarlo dopo il titolo dell’utente (se ne ha uno). Ho provato a modificare il codice del plugin (dopo averlo forkato) ma finora non ho avuto successo.

Ho aggiornato il plugin; fammi sapere se funziona per te.

2 Mi Piace

Grazie mille. Ha funzionato.

Sembra fantastico. È possibile aggiungere anche le reazioni totali + icone FA?

Non posso modificare, quindi ho appena installato e testato il plugin e funziona molto bene. Tranne su mobile, dove il numero totale di post viene visualizzato sul lato sinistro del nome. :frowning:

@David_Ghost
Puoi risolverlo con un po’ di CSS:

.names.trigger-user-card > div:has(.user-post-user__container) {
    order: 2;
}
2 Mi Piace