Creare un plugin in Discourse può essere davvero semplice, una volta apprese alcune particolarità. L’obiettivo di questo post è creare uno scheletro di plugin e introdurti alle basi.
Il tuo ambiente di sviluppo
Assicurati di avere un ambiente di sviluppo di Discourse in esecuzione sul tuo computer. Ti consiglio di utilizzare la guida di configurazione appropriata e di tornare quando hai finito.
plugin.rb
Usa GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub per creare uno scheletro completo di plugin Discourse nella tua directory dei plugin
Lo scheletro è ora incluso nel core di Discourse;
rake plugin:create[nome-plugin]creerà un plugin utilizzando lo scheletro
Quando Discourse si avvia, cerca nella directory plugins le sottodirectory che contengono un file plugin.rb. Il file plugin.rb ha due scopi: è il manifesto del tuo plugin con le informazioni necessarie, tra cui: il nome, i dati di contatto e una descrizione. Il secondo scopo è inizializzare qualsiasi codice Ruby necessario per eseguire il tuo plugin.
Nel nostro caso, non aggiungeremo alcun codice Ruby, ma abbiamo comunque bisogno di plugin.rb. Creiamo la directory basic-plugin con il file plugin.rb al suo interno, con il seguente contenuto:
basic-plugin/plugin.rb
# name: basic-plugin
# about: Un plugin super semplice per dimostrare come funzionano i plugin
# version: 0.0.1
# authors: Awesome Plugin Developer
# url: https://github.com/yourusername/basic-plugin
Una volta creato questo file, dovresti riavviare il tuo server locale e il plugin dovrebbe essere caricato.
Un importante avvertimento!
Se sei abituato allo sviluppo standard con Rails, potresti notare che i plugin non sono altrettanto comodi quando si tratta di ricaricamento. In generale, quando apporti modifiche al tuo plugin, dovresti premere Ctrl+c per arrestare il server e poi riavviarlo usando bin/dev.
Le mie modifiche non sono state rilevate! 
A volte la cache non viene pulita completamente, specialmente quando crei nuovi file o elimini vecchi file. Per risolvere questo problema, rimuovi la cartella tmp e riavvia Rails. Su un Mac puoi farlo con un unico comando: rm -rf tmp; bin/dev.
Verifica che il tuo plugin sia stato caricato
Dopo aver riavviato il server locale, visita l’URL /admin/plugins (assicurati di essere accesso come amministratore prima, poiché solo gli amministratori possono vedere il registro dei plugin).
Se tutto ha funzionato, dovresti vedere il tuo plugin nell’elenco:
Congratulazioni, hai appena creato il tuo primo plugin!
Aggiungiamo un po’ di JavaScript
Al momento il tuo plugin non fa nulla. Aggiungiamo un file JavaScript che aprirà una finestra di avviso quando Discourse si avvia. Questo sarà molto fastidioso per qualsiasi utente e non è raccomandato per un plugin reale, ma mostrerà come inserire JavaScript nella nostra applicazione in esecuzione.
Crea il seguente file:
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("le finestre di avviso sono fastidiose!");
},
};
Ora, se riavvii il server locale, dovresti vedere apparire lo schermo il messaggio «le finestre di avviso sono fastidiose!». (Se non è successo, vedi la sezione «Le mie modifiche non sono state rilevate» sopra).
Analizziamo come ha funzionato:
-
I file JavaScript posizionati in
assets/javascripts/discourse/initializersvengono eseguiti automaticamente quando l’applicazione Discourse si avvia. -
Questo file specifico
exportun oggetto, che ha unnamee una funzioneinitialize. -
Il
namedeve essere unico, quindi l’ho chiamato semplicementealert. -
La funzione
initialize()viene chiamata quando l’applicazione si avvia. Nel nostro caso, fa solo eseguire il nostro codicealert().
Ora sei ufficialmente uno sviluppatore di plugin Discourse!
Altri articoli della serie
Parte 1: Questo argomento
Parte 2: Plugin Outlets
Parte 3: Impostazioni del sito
Parte 4: Configurazione git
Parte 5: Interfacce di amministrazione
Parte 6: Test di accettazione
Parte 7: Pubblica il tuo plugin
Questo documento è sottoposto a controllo versione: suggerisci modifiche su GitHub.

