Incorpora una lista di argomenti di Discourse su un sito esterno

:bookmark: Questa guida spiega come incorporare e visualizzare un elenco di argomenti di Discourse su siti web esterni utilizzando JavaScript, consentendo di mostrare contenuti del forum come discussioni o annunci su blog, siti web o piattaforme di contenuti esterni.

:person_raising_hand: Livello utente richiesto: Amministratore

Riepilogo

Incorporare argomenti di Discourse su siti web esterni consente di visualizzare elenchi di argomenti dal proprio forum Discourse direttamente su altri siti. Questa integrazione aiuta a generare traffico verso il tuo forum e mantiene il tuo pubblico coinvolto con i contenuti della tua community. Gli argomenti incorporati appaiono come un widget JavaScript che si integra con la struttura DOM del tuo sito, rendendolo più facile da personalizzare tramite CSS.

Abilita incorporamento argomenti

Per configurare l’incorporamento di argomenti sul tuo sito esterno:

  1. Accedi alla dashboard di amministrazione di Discourse e fai clic su site_settings. Cerca e abilita l’impostazione del sito embed_topics_list.

  2. Aggiungi lo script di incorporamento alla sezione <head> HTML del tuo sito esterno:

    <script src="https://discourse.example.com/javascripts/embed-topics.js"></script>
    

    Sostituisci discourse.example.com con l’URL effettivo del tuo forum Discourse.

  3. Posiziona l’elemento dell’elenco argomenti dove desideri visualizzare gli argomenti (ad esempio, in un post del blog o in una singola pagina del sito):

    <d-topics-list discourse-url="https://discourse.example.com" category="1234" per-page="5"></d-topics-list>
    
  4. Se stai incorporando argomenti su un dominio diverso dal tuo sito Discourse, aggiungi il dominio del tuo sito esterno in Admin > Avanzate > Incorporamento > Host.

    Ad esempio, se il tuo sito Discourse si trova su tuo-forum-discourse.com e desideri incorporare argomenti su tuo-sito-esterno.com, devi aggiungere tuo-sito-esterno.com al tuo elenco di host consentiti.

:warning: Non è possibile incorporare argomenti da un sito Discourse privato che richiede l’accesso.

Parametri di configurazione

L’elemento d-topics-list supporta i seguenti attributi per personalizzare la visualizzazione degli argomenti:

  • discourse-url - L’URL del tuo sito Discourse (richiesto)
  • template - Opzioni di stile di visualizzazione:
    • basic (predefinito) - Mostra informazioni minime sull’argomento
    • complete - Mostra titolo, nome utente, avatar, data di creazione e miniatura
  • per-page - Numero di argomenti da visualizzare
  • category - ID della categoria per filtrare gli argomenti da una categoria specifica
  • tags - Filtra gli argomenti per tag specifici
  • allow-create - Se impostato su true, mostra un pulsante “Nuovo argomento”
  • top_period - Mostra gli argomenti principali di un periodo specifico:
    • all
    • yearly
    • quarterly
    • monthly
    • weekly
    • daily

Puoi combinare più parametri per affinare la visualizzazione del tuo elenco di argomenti. Ad esempio:

<d-topics-list
  discourse-url="https://discourse.example.com"
  category="5"
  tags="announcements"
  per-page="10"
  template="complete">
</d-topics-list>

Personalizzazione dell’aspetto

Puoi stilizzare gli argomenti incorporati utilizzando SCSS personalizzato nel tuo pannello Admin > Personalizza > Temi. Fai clic sul tuo tema corrente o predefinito e fai clic su Modifica codice. Puoi quindi selezionare Mostra_avanzate e scegliere CSS incorporato per aggiungere il tuo codice personalizzato:

Ecco un esempio di SCSS per creare un layout a griglia:

.topics-list {
  display: grid;
  grid-template-columns: repeat(2, 1fr);

  .topic-list-item {
    .main-link {
      border: 1px dotted gray;
      padding: 0;
    }

    .topic-column-wrapper {
      flex-direction: column-reverse;

      .topic-column.details-column {
        width: 100%;
      }

      .topic-column.featured-image-column .topic-featured-image img {
        max-width: initial;
        max-height: initial;
        width: 100%;
      }
    }
  }
}

Migliori pratiche

  • Utilizza filtri di categorie e tag significativi per mostrare contenuti pertinenti per il tuo pubblico.
  • Imposta un valore appropriato per per-page per evitare di sovraccaricare i visitatori.
  • Testa i tuoi argomenti incorporati su diverse dimensioni dello schermo per garantire un design reattivo.
  • Considera l’utilizzo del template complete per un migliore impatto visivo quando lo spazio lo consente.
  • Rivedi regolarmente il tuo elenco di host consentiti per garantire che solo i domini autorizzati possano incorporare i tuoi argomenti.

Problemi comuni e soluzioni

Argomenti non visualizzati sul dominio esterno

Problema: Gli argomenti incorporati appaiono come una casella vuota o grigia quando visualizzati su un dominio esterno.

Soluzione: Aggiungi il dominio esterno all’elenco Admin > Personalizza > Incorporamento > Host consentiti del tuo sito Discourse. Assicurati di includere il sottodominio corretto (ad esempio, se il tuo sito utilizza www.example.com, aggiungi www.example.com anziché solo example.com).

Errori di caricamento dello script

Problema: Lo script di incorporamento non viene caricato o restituisce errori di connessione.

Soluzione:

  • Verifica che l’URL di Discourse nell’origine dello script sia corretto e accessibile.
  • Verifica che l’impostazione del sito embed_topics_list sia abilitata.
  • Assicurati che il tuo sito Discourse non richieda l’accesso per gli argomenti pubblici.

Comportamento del contesto SameSite

Nei contesti SameSite in cui il sito di incorporamento e il forum condividono un dominio padre, Discourse rispetta lo stato di accesso e visualizza i risultati di conseguenza. Gli utenti connessi potrebbero vedere contenuti da categorie sicure a cui gli utenti anonimi non possono accedere.

Domande frequenti

D: Posso incorporare argomenti da un sito Discourse privato?
R: No, l’incorporamento di argomenti funziona solo con siti Discourse pubblici. I siti privati che richiedono l’accesso non possono essere incorporati.

D: Posso incorporare più elenchi di argomenti nella stessa pagina?
R: Sì, puoi includere più elementi <d-topics-list> nella stessa pagina con parametri diversi per visualizzare varie raccolte di argomenti.

D: Come incorporo argomenti con immagini in evidenza?
R: Utilizza il parametro template="complete" nel tuo elemento <d-topics-list> per visualizzare argomenti con miniature e immagini in evidenza.

D: Posso cambiare dove si aprono i link degli argomenti?
R: Per impostazione predefinita, i link degli argomenti si aprono nella finestra padre. Puoi modificare questo comportamento tramite personalizzazione CSS o JavaScript.

Risorse aggiuntive

9 Mi Piace

Funziona con gli abbonamenti Discourse? Ho provato a implementarlo e stava inquadrando l’intero forum anziché gli argomenti?

1 Mi Piace

Sì, questo dovrebbe funzionare insieme al plugin Discourse Subscriptions senza problemi.

L’incorporamento si basa sulla configurazione di parametri specifici per controllare quali argomenti vengono visualizzati, come category, tags o per-page, tramite il tag d-topics-list nell’HTML del tuo sito web. Se il tuo incorporamento ha finito per inquadrare l’intero forum, potresti voler assicurarti che l’URL di Discourse e qualsiasi parametro nel tag <d-topics-list> siano impostati correttamente per riflettere gli argomenti che intendi visualizzare.

4 Mi Piace

Ciao, è molto bello! Grazie!

Vorrei cambiare il valore target dell’elemento a di topic-list-item in “_blank” (il valore predefinito è “_parent”, ha problemi di cross-domain e non è quello che voglio), cosa devo fare?

Ciao, sto cercando di visualizzare questi su 2 siti diversi.

Il mio URL di Discourse è https://learn.getupearlier.com

Ho questo script incorporato qui e funziona:

Ho lo stesso script incorporato qui e non funziona:

Questo è nell’header:

<script src="https://learn.getupearlier.com/javascripts/embed-topics.js"></script>

Questo è nella pagina:

<d-topics-list discourse-url="https://learn.getupearlier.com" category="5" per-page="10"></d-topics-list>

Qualsiasi aiuto è apprezzato!

2 Mi Piace

Ciao Michael,

Il problema che stai riscontrando qui è probabilmente correlato all’utilizzo di un dominio diverso da quello del tuo sito Discourse per incorporare gli argomenti.

Il tuo script funziona su getupearlier.com perché si trova sullo stesso dominio del tuo sito Discourse learn.getupearlier.com, mentre michaelbakerdigital.com si trova su un dominio diverso.

Ho aggiunto questa sezione alla guida, che spiega come risolvere questa situazione.

Quindi, per la tua situazione, l’aggiunta di michaelbakerdigital.com a “Incorporamento” → “Host consentiti” del tuo sito Discourse dovrebbe consentirti di incorporare correttamente gli argomenti su quel dominio.

6 Mi Piace

Ciao, ho permesso questo URL come puoi vedere di seguito:

Ecco l’URL di prova:
https://www.michaelbakerdigital.com/discourse-test/

Ottengo solo una casella di errore grigia vuota

E questo è il codice all’interno di michaelbakerdigital.com

<div id='discourse-comments'></div>
<meta name='discourse-username' content='MikeB'>

<script type="text/javascript">
  DiscourseEmbed = {
    discourseUrl: 'https://learn.getupearlier.com/',
    discourseEmbedUrl: 'michaelbakerdigital.com',
    // className: 'CLASS_NAME',
  };

  (function() {
    var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
    d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  })();
</script>

Oppure questo:

<d-topics-list discourse-url="https://learn.getupearlier.com" category="5" per-page="5"></d-topics-list>

Qualsiasi aiuto è apprezzato, sono bloccato qui da sempre e continuo a voler risolvere questo problema.

Ciao, la soluzione qui è stata che il mio nome di dominio, aggiunto alla sezione embed, necessitava di www.

Questo è tutto! Tanto tempo per 4 caratteri, ma l’ho risolto con l’aiuto del supporto di Discourse e WP Engine.

C’è un codice di esempio da utilizzare per pubblicare anche un’immagine in primo piano sul sito esterno?

Grazie mille

Aiuto Necessario: Incorporare l’elenco degli argomenti di Discourse sul sito Next.js

Ciao a tutti,

Sto cercando di incorporare un elenco di argomenti di Discourse sul mio sito web (example.io) che è costruito con il framework Next.js e Node.js, distribuito tramite Vercel. Ho creato una replica di test del sito web su test-discourse.app a questo scopo.

Ecco cosa ho fatto finora:

  1. Ho aggiunto l’host alle impostazioni di incorporamento di Discourse.
  2. Ho abilitato CORS nell’ambiente e aggiunto l’host all’origine CORS.
  3. Ho disattivato CSP (Content Security Policy).

Nonostante abbia seguito questi passaggi e aggiunto gli script necessari, non riesco ancora a vedere l’elenco degli argomenti sul mio sito web.

Ecco il codice che sto utilizzando:

Nella sezione head:

<script src="my-website/javascripts/embed-topics.js"></script>

Nella sezione body:

<d-topics-list discourse-url="my-website" tags="example"></d-topics-list>

Ho anche provato l’incorporamento delle categorie come mostrato nel post.

Qualcuno potrebbe indicarmi cosa potrei star trascurando o facendo di sbagliato? Qualsiasi suggerimento per far apparire l’elenco degli argomenti sul mio sito web sarebbe molto apprezzato.

Grazie in anticipo per il vostro aiuto!

Ho un’istanza Discourse in esecuzione su un VPS
Ho un altro sito web in esecuzione su un VPS diverso
Entrambi hanno lo stesso dominio principale, ad esempio

community.mydomain.com
mydomain.com

Ho utilizzato con successo questo metodo per incorporare un elenco di argomenti dal server del forum (Discourse) nell’altro sito web. È davvero ottimo per generare traffico dal mio sito web al forum.

Utilizzo il componente dei blocchi della barra laterale destra per elencare gli ‘eventi imminenti’ da un calendario utilizzando il plugin discourse-calendar

Vorrei replicare gli ‘eventi imminenti’ sul mio altro sito web. Posso utilizzare il metodo descritto in questo argomento per ottenere tutti gli argomenti nella mia categoria del calendario, ma sono ordinati per quelli pubblicati più di recente

Il componente dei blocchi della barra laterale destra li ordina per data dell’evento
esempio

C’è un modo per farlo? Ho il controllo amministrativo su entrambi i siti web.
Esiste un altro modo per estrarre dati dal mio server Discourse, come l’API? L’API è installata su tutte le istanze Discourse per impostazione predefinita o devo installarla?

1 Mi Piace

Dato che non ho ricevuto alcun suggerimento, ho pensato di rispondere ad alcune delle mie domande per chiunque fosse interessato

solo per riferimento SÌ, l’installazione self-hosted installazione ufficiale includeva l’API REST

Ho ricevuto suggerimenti dal thread di esempio API su come effettuare chiamate cURL dal terminale. Una volta che i comandi cURL hanno funzionato, ho utilizzato questo sito web per convertire la versione da riga di comando in PHP

Il mio altro server esegue PHP come backend e faccio chiamate ajax dalla pagina web alle funzioni sul server. Discourse restituisce json e javascript che ha creato per decodificarlo. Stile secondo necessità… zuppa
nota che questo potrebbe funzionare solo perché

e uso la chiave API e l’utente per come trovare qui
spero aiuti qualcuno :+1:

1 Mi Piace

Sembra che possiamo anche usare il link di incorporamento all’interno di un post del forum, in questo modo:

<iframe width="500" height="400" src="https://meta.discourse.org/embed/topics?tags=release-notes" frameborder=0 scrolling="no"></iframe>

(non funzionerà qui perché non hanno abilitato il proprio sito nelle impostazioni di amministrazione di iframe)

Tuttavia, scrolling="no" non funziona… Apparentemente il consorzio standard ha deprecato lo scrolling in HTML5 e lo ha sostituito con… niente. Gli iframe migliorano ogni anno, vero?

Nel mio test, se cambio il <body all’interno dell’iframe in overflow: hidden, la barra di scorrimento orizzontale scompare. Non ho trovato un modo per far scomparire quella verticale. Dal mio plugin c’è un modo per modificare la pagina di incorporamento per impostare overflow: hidden?

Quando si incorporano elenchi di argomenti, qual è il modo “migliore” se voglio creare una carosello da tutti gli argomenti incorporati con scorrimento orizzontale?

C’è un modo per cambiare ogni link dell’argomento in modo che si apra in una nuova scheda/finestra?