Come molti di voi in questa discussione, ho cercato un modo leggero per utilizzare Discourse nativamente come LMS. Trovo le piattaforme LMS dedicate troppo pesanti, ma il “degrado delle notifiche” predefinito di Discourse (dove gli argomenti più vecchi smettono di apparire come “non letti” per i nuovi utenti) rende difficile tracciare i progressi del corso.
Per soddisfare la mia esigenza, ho creato una soluzione semplice combinando impostazioni delle categorie, un piccolo plugin backend e un componente del tema.
Ecco come l’ho configurato e il codice open-source che puoi utilizzare per replicarlo!
Il concetto di base: Discourse come LMS
Per far funzionare tutto, utilizzo le funzionalità standard di Discourse combinate con il plugin ufficiale Discourse Doc Categories:
- Corso = Categoria: Ogni corso ha la propria categoria.
- Lezione = Argomento: Ogni lezione è un argomento all’interno di quella categoria.
- Permessi: Gli utenti possono rispondere alle lezioni (per fare domande), ma solo lo staff può creare nuovi argomenti.
- Ordinamento: L’ordine delle lezioni è fissato dalla data di creazione. (Suggerimento: Questo richiede un po’ di lungimiranza quando si pubblicano le lezioni, oppure puoi utilizzare la console Rails per retrodatare rapidamente i tempi di creazione degli argomenti e forzare l’ordinamento corretto).
- Programma: Utilizzo il plugin Discourse Doc Categories per designare un “Argomento Indice”. Questo argomento indice funge da programma/monitoraggio del corso e visualizza un bellissimo schema nella barra laterale quando gli utenti entrano nel corso.
Il pezzo mancante: Tracciamento reale dei progressi
Il problema con la configurazione sopra è che quando un nuovo studente si iscrive, gli argomenti delle lezioni più vecchie non appaiono come “non letti”, quindi non hanno modo di tracciare visivamente i propri progressi.
Per risolvere il problema, ho creato un plugin backend che interroga direttamente la tabella del database TopicUser per lo stato di lettura storico reale e un componente del tema frontend che trasforma la barra laterale standard di Discourse in un tracciatore dei progressi LMS in tempo reale.
1. Badge di progresso nella barra laterale principale
Il componente del tema sostituisce i normali punti blu delle notifiche con indicatori di progresso [ letti / totali ] per le tue categorie di corso.
2. Spunte di completamento della lezione
Quando un utente entra in un corso, il plugin Docs visualizza il programma. Il mio componente del tema inserisce le spunte di successo (fa-check) accanto alle lezioni specifiche che l’utente ha terminato di leggere.
3. Completamento del corso
Una volta che un utente ha letto tutti gli argomenti nella categoria, il badge di progresso nella barra laterale si trasforma automaticamente in una soddisfacente spunta di completamento!
Come installarlo
Poiché ciò richiede di aggirare la cache standard delle notifiche di Discourse, devi installare sia il plugin backend che il componente del tema frontend.
Passaggio 1: Installa il prerequisito
Assicurati di avere il plugin ufficiale Discourse Doc Categories installato e attivo. Il mio plugin si rivolge specificamente solo alle categorie che hanno un Argomento Indice configurato.
Passaggio 2: Installa il plugin API backend
Aggiungi questo al tuo file app.yml sotto docker_manager e ricostruisci il tuo contenitore. Questo fornisce un endpoint API rapidissimo per gli stati di lettura.
Link al repository: https://github.com/zsviczian/discourse-course-progress**
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/zsviczian/discourse-course-progress.git
Passaggio 3: Installa il componente del tema UI
Installa questo direttamente dal tuo browser web in Amministrazione > Personalizza > Temi > Installa > Da un repository Git.
Link al repository: https://github.com/zsviczian/discourse-course-progress-theme
Spero che questo aiuti gli altri che stanno cercando di creare corsi guidati dalla comunità senza il peso di una piattaforma LMS separata! Fammi sapere se alla fine lo userai.



