<div data-theme-toc="true"> </div>
Discourse ha la capacità di incorporare i commenti di un argomento in un sito remoto utilizzando un'API Javascript che crea un IFRAME. Per un esempio di questo in azione, consulta il blog di [Coding Horror](http://blog.codinghorror.com/welcome-to-the-internet-of-compromised-things/#discourse-comments). Il blog è gestito tramite [Ghost](https://ghost.org/) ma i commenti sono incorporati dal suo [forum Discourse](http://discourse.codinghorror.com/t/welcome-to-the-internet-of-compromised-things/3550).
Una cosa importante da notare con questa configurazione è che **gli utenti devono navigare sul tuo forum per pubblicare le risposte**. Questo è intenzionale, poiché riteniamo che l'interfaccia di pubblicazione su un forum Discourse sia attualmente molto più ricca di quanto potremmo incorporare tramite Javascript.
Questa guida mostrerà come configurare l'incorporamento dei commenti sul tuo blog o sito web.
### Come funziona
In Discourse, un argomento è composto da molti post. Quando stai *incorporando* Discourse su un altro sito, stai collegando un documento (voce del blog, pagina HTML, ecc.) con un singolo *argomento*. Quando le persone pubblicano in quell'argomento, i loro commenti appariranno automaticamente nella pagina in cui l'hai incorporato.
Hai la possibilità di far creare automaticamente gli argomenti da Discourse quando viene rilevato un nuovo incorporamento, oppure puoi creare gli argomenti in anticipo tu stesso.
### Configurazione di Discourse per l'incorporamento (configurazione semplice)
La seguente configurazione incorporerà un feed di commenti in una pagina con un URL di blog fittizio di `http://example.com/blog/entry-123.html`, da un forum discourse in esecuzione a `=DISCOURSE=`.
[wrap=placeholder key=DISCOURSE default=discourse.example.com]Dominio per [/wrap]
[wrap=placeholder key=BLOG default=example.com]Dominio per [/wrap]
1. Visita **Admin > Personalizza > Incorporamento** nella tua installazione di Discourse. https://=DISCOURSE=/admin/customize/embedding
2. Crea almeno un **Host Incorporabile** (Embeddable Host). Questo dovrebbe essere il nome host (dominio) in cui desideri incorporare i tuoi commenti. In questo caso, l'host è `=BLOG=` -- nota l'assenza di `http://` e percorso.
- **Consentire Percorsi** (Path Allowlist) ti consente di specificare i percorsi sull'host remoto che accetterebbero il tuo incorporamento.
- **Pubblica in Categoria** (Post to Category) - se fornisci una categoria insieme all'host che stai inserendo, i post importati da quell'host finiranno automaticamente in quella categoria. Host diversi possono pubblicare in categorie diverse.
- **Tag** - puoi assegnare tag da applicare automaticamente agli argomenti creati da un dato host.
- **Autore Post** (Post Author) - puoi facoltativamente sovrascrivere l'utente di creazione dell'argomento su base per host. Se non impostato, viene utilizzato il valore predefinito dalla scheda **Post e Argomenti** (Posts and Topics).
3. Naviga nella scheda **Post e Argomenti** (Posts and Topics) e compila il campo **Nome utente per la creazione di argomenti** (Username for topic creation). Questo è l'utente che creerà gli argomenti quando verranno trovati nuovi incorporamenti. Supponiamo che il nostro discourse abbia un utente chiamato eviltrout, quindi il valore è `eviltrout`.
4. Inserisci il seguente HTML sulla pagina web all'indirizzo `http://=BLOG=/blog/entry-123.html`
```html
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = {
discourseUrl: 'https://discourse.example.com/',
discourseEmbedUrl: 'http://example.com/blog/entry-123.html',
// 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>
Le parti configurabili dello snippet sono nell’oggetto DiscourseEmbed. discourseUrl è il percorso completo alla base del tuo discourse, incluso lo slash finale. discourseEmbedUrl è il documento che sta attualmente incorporando un feed di commenti.
Se imposti correttamente questo, la prima volta che visiti http://=BLOG=/blog/entry-123.html tenterà di caricare i commenti per il post del blog. Poiché non ce ne sono, dirà al forum Discourse di creare un nuovo argomento in background. Un nuovo argomento verrà creato da eviltrout e il contenuto del primo post verrà sottoposto a scansione dal tuo blog e il testo verrà estratto automaticamente.
Una volta creato il nuovo argomento, gli utenti potranno pubblicare su di esso e i loro commenti verranno visualizzati automaticamente la prossima volta che si visiterà http://=BLOG=/blog/entry-123.html.
className è facoltativo e aggiungerà una classe a tua scelta all’incorporamento in modo che tu possa personalizzarlo con CSS.
Suggerimento: Se il tuo blog ha più autori, puoi aggiungere un tag
<meta name="discourse-username" content="author_username">a ogni pagina. Quando Discourse esegue la scansione della pagina per creare l’argomento, utilizzerà questo meta tag per determinare l’autore del post, sovrascrivendo il nome utente predefinito impostato nelle impostazioni di amministrazione.
Incorporamento su più di una pagina
Nell’esempio sopra abbiamo codificato l’URL http://=BLOG=/blog/entry-123.html quando abbiamo incorporato lo snippet di Javascript. Di solito questo non sarà sufficiente poiché molti siti hanno molte pagine generate automaticamente. Ad esempio, in un blog, ogni voce ottiene tipicamente la propria pagina. Per supportare ciò, inserisci lo stesso snippet su ogni pagina in cui desideri visualizzare i commenti, ma sostituisci il valore passato a discourseEmbedUrl con l’URL della pagina corrente. Sul mio blog, uso il seguente valore per discourseEmbedUrl: 'http://eviltrout.com<%= current_page.url %>' – man mano che vengono create nuove pagine del blog, nuovi argomenti verranno creati automaticamente su Discourse.
Stile dei contenuti incorporati
Hai la possibilità di aggiungere un foglio di stile per i tuoi commenti incorporati. Utilizza la sezione CSS Incorporato (Embedded CSS) dell’editor Temi in Admin > Personalizza > Temi > [il tuo tema] > Modifica CSS/HTML e puoi aggiungere un foglio di stile personalizzato che verrà servito con i tuoi commenti incorporati. Per impostazione predefinita, pensiamo che il layout sia gradevole su uno sfondo bianco, ma se il tuo sito ha un layout unico, vorrai stilizzarlo tu stesso.
(Facoltativo) Aggiunta di un feed per il polling
Come menzionato sopra, Discourse eseguirà automaticamente la scansione di qualsiasi sito in cui è incorporato. Tuttavia, a volte l’HTML può essere difficile da analizzare e potrebbe non estrarre correttamente il contenuto dei tuoi post. Molti blog e siti web supportano feed RSS/Atom per la syndication, e Discourse può utilizzarlo per estrarre il contenuto dei tuoi post del blog in modo più accurato.
Discourse include il plugin di polling RSS (incluso per impostazione predefinita). Se hai configurato un feed RSS o Atom sul sito in cui stai incorporando Discourse, puoi abilitare l’impostazione del sito rss_polling_enabled e aggiungere l’URL del tuo feed tramite Admin > Plugin > Polling RSS (RSS Polling). Una volta aggiunto l’URL del feed, Discourse analizzerà il feed e pubblicherà i suoi post nella categoria appropriata in base agli Host consentiti che aggiungi alle impostazioni di Incorporamento.
(Configurazione Alternativa) Collegamento ad argomenti esistenti
Alcune persone preferiscono non far creare automaticamente argomenti da Discourse sui loro forum. Preferiscono creare gli argomenti stessi e poi semplicemente dire al loro codice di incorporamento quale argomento vogliono associare. Puoi farlo modificando leggermente il tuo codice di incorporamento:
<div id='discourse-comments'></div>
<script type="text/javascript">
window.DiscourseEmbed = {
discourseUrl: 'https://=DISCOURSE=/',
topicId: 12345
};
(function() {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = window.DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
</script>
L’unica differenza qui è che abbiamo sostituito discourseEmbedUrl con l’ID di un argomento di Discourse. Se fai questo, nessun argomento verrà creato e i commenti di quell’argomento verranno visualizzati automaticamente.
Impostazione della policy di referrer
A causa dei recenti (settembre 2020) cambiamenti alla policy di referrer predefinita impostata da molti browser, Discourse ora imposta esplicitamente come predefinita la policy di referrer dell’iframe su "no-referrer-when-downgrade". Se, per motivi di sicurezza, il tuo sito richiede una policy di referrer più rigorosa, può essere impostata aggiungendo un valore discourseReferrerPolicy all’oggetto DiscourseEmbed dello script di incorporamento. Per esempio:
DiscourseEmbed = { discourseUrl: 'https://forum.example.com/',
discourseEmbedUrl: '<your_posts_canonical_URL>',
discourseReferrerPolicy: 'strict-origin-when-cross-origin'};
Interrogazione programmatica dei dettagli di Incorporamento
Abbiamo un endpoint API per interrogare i dettagli di Incorporamento utilizzando embed_url come parametro:
curl 'https://meta.discourse.org/embed/info?embed_url=https://blog.discourse.org/2021/04/discourse-team-grows-to-50' -H 'API-KEY: logapikeygoeshere' -H 'API-USERNAME: apiusernamehere'
E la risposta è:
{
"topic_id": 187794,
"post_id": 925017,
"topic_slug": "discourse-team-grows-to-50-blog",
"comment_count": 2
}
Incorporamento di commenti da un sito privato
Per le istanze Discourse private, se Discourse si trova su un sottodominio del dominio del blog, i commenti verranno visualizzati per gli utenti che hanno effettuato l’accesso a Discourse. Gli utenti che non hanno effettuato l’accesso a Discourse vedranno un messaggio di “rifiuto della connessione”. Se Discourse e il blog si trovano su domini completamente separati, non verranno visualizzati commenti per i forum privati.
Risoluzione dei problemi
Il problema più comune che gli utenti riscontrano durante l’incorporamento di Discourse è l’impostazione del valore corretto per gli host incorporabili che hai aggiunto. Assicurati di ricontrollare che sia solo il dominio del tuo sito e che non contenga slash aggiuntivi o caratteri non validi.