È molto utile per quanto riguarda temi e plugin, così come per l’esempio specifico che ho menzionato. Grazie.
Finora il mio approccio per apportare modifiche è stato analizzare i dettagli del codice di Discourse (dove è definito questo oggetto, cosa controlla questo template, dove si trova la logica che gestisce questa azione, ecc.). Ma questo processo è stato lento.
Penso che un percorso probabilmente più efficiente sarebbe concentrarsi sull’API. In questo modo, non devo analizzare tutti i dettagli del codice maturo di Discourse e posso anche concentrarmi sulla creazione di un tema invece di un plugin, oppure semplicemente apportare modifiche nella dashboard “personalizza”.
In sostanza, capire come funziona l’API sembra molto più gestibile rispetto a comprendere l’intera codebase di Discourse.
Per restare sull’esempio che ho menzionato: se un utente è un moderatore di una categoria, consenti a quell’utente di fissare gli argomenti nella pagina della categoria.
Potrei farlo senza un plugin? Lasciami provare a schizzarlo:
1. Un utente è un moderatore di una categoria?
Attualmente non vedo nulla nell’API che mi indichi se un utente è un moderatore di una categoria. Mi aspetterei di trovarlo in una chiamata GET per recuperare una categoria, ma non vedo una tale chiamata lì. O forse nella chiamata GET per recuperare un utente, ma lì non vedo un elenco delle categorie di cui l’utente è moderatore.
Potrei aggiungerle?
In alternativa, potrei creare un campo personalizzato (custom_field) sull’utente o sulla categoria per identificare il ruolo di moderatore, e poi fare una chiamata API a quel campo personalizzato quando viene caricata la pagina della categoria.
2. Se l’utente è un moderatore, mostra il pulsante per fissare.
Se riesco a rispondere alla domanda (1), allora presumo di poter semplicemente aggiungere questo pulsante con JavaScript e CSS lato frontend, mostrandolo solo se l’utente è un moderatore.
3. L’utente (che è moderatore) clicca sul pulsante e ciò fissa l’argomento
Sull’API, gli argomenti sembrano avere effettivamente una proprietà “pinned” (un booleano). Presumo che questo corrisponda al fatto che siano fissati nella loro categoria, dato che sembra che ogni argomento abbia una sola categoria.
Quindi, quando il moderatore preme il pulsante “fissa”, potrei probabilmente aggiornare lo stato “pinned” dell’argomento a True. Se questo non funzionasse, anche i campi personalizzati potrebbero essere una soluzione (anche se non vedo come aggiungere campi personalizzati a un argomento).
Quindi, con questo approccio o qualcosa di simile, sembra che potrei completare questo compito utilizzando l’API, mentre se lo facessi con un plugin richiederebbe molta analisi dei file della codebase di Discourse.
Ha senso?