Plugin Gatsby per usare Discourse come CMS headless

Ho creato un plugin, non per Discourse ma per Gatsby. Il plugin recupera le liste degli argomenti da un’installazione di Discourse e le trasforma in nodi Gatsby. Semplifica l’uso di Discourse come CMS headless.

Lo utilizziamo in un progetto per creare un microblog e un calendario che si aggiorna automaticamente quando viene aggiunto nuovo contenuto al forum.

Ecco il microblog:

Fonte: https://foodshift.se/t/forenade-inkop-nyheter-blogg/290/9
Risultato: https://forenadeinkop.se/blogg

Ecco il calendario:

Fonte: https://foodshift.se/tags/c/events/13/forenade-inkop/l/agenda
Risultato: https://forenadeinkop.se (in fondo)

Spero che qualcun altro lo trovi utile!


versione npm download npm

gatsby-source-discourse-topic-list ti aiuta a recuperare le liste degli argomenti dalla piattaforma di forum Discourse e a trasformarle in nodi Gatsby.

Oltre alla lista degli argomenti fornita dall’API di Discourse, il plugin recupera anche il testo grezzo per ogni argomento.

Per iniziare

  1. Installa il pacchetto con yarn o npm

yarn add gatsby-source-discourse-topic-list

  1. Aggiungilo ai plugin nel tuo file gatsby-config.js
module.exports = {
    plugins: [
        {
            resolve: "gatsby-source-discourse-topic-list",
            options: {
                url: "https://my-discourse-server.com"
                endPoint: 'top.json',
            }
        }
    ]
};

Opzioni

Nome Tipo Descrizione
url oggetto o stringa Obbligatorio. URL della tua installazione Discourse come stringa. Se hai due API diverse per sviluppo e produzione, definisci un oggetto con le chiavi production e development.
endPoint stringa Obbligatorio. Qualsiasi endpoint API di Discourse che restituisce una topic_list.
rootKey stringa Opzionale. Dai un nome alla tua API.

Esempi di endpoint API Discourse

Argomenti più recenti in una categoria:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'c/1.json',
}

Argomenti più recenti in una categoria, filtrati per tag:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'tags/c/bug/1/pr-welcome.json',
}

Argomenti più popolari in una categoria:

options: {
    url: "https://meta.discourse.org"
    endPoint: 'c/support/6/l/top.json',
}

Consulta la documentazione API di Discourse per un elenco completo degli endpoint.

Esempio di risultato

Notare il campo raw aggiunto, contenente il testo completo non elaborato dell’argomento.

{
  "users": [
    {
      "id": 0,
      "username": "string",
      "avatar_template": "string"
    }
  ],
  "topic_list": {
    "can_create_topic": true,
    "draft": {},
    "draft_key": "string",
    "draft_sequence": 0,
    "for_period": "string",
    "per_page": 0,
    "topics": [
      {
        "id": 0,
        "title": "string",
        "fancy_title": "string",
        "slug": "string",
        "raw": "Il testo completo non elaborato dell'argomento in formato markdown", 
        ...
      }
    ]
  }
}

Più fonti? Più istanze!

Se desideri recuperare più endpoint nel tuo progetto, istanzia semplicemente il plugin più volte. Assicurati solo di impostare un rootKey diverso per ogni istanza.

Crediti

Questo plugin si basa sull’ottimo gatsby-source-custom-api di Andreas Faust. :folded_hands:

Contributi

Ogni contributo è molto apprezzato.
Sentiti libero di segnalare bug, funzionalità e richieste di pull.

:heart: Se questo plugin ti è utile, dagli una stella su GitHub.

Sembra interessante. Funziona con i topic provenienti da categorie private? Mi riferisco allo scenario in cui si utilizza Discourse come CMS headless.

Non al momento, ma è una buona idea, non sarebbe difficile aggiungerlo. L’accesso ai contenuti privati richiede l’autenticazione. Potrebbero essere aggiunti un nome utente e una chiave API alla configurazione di Gatsby.