Grazie, @tshenry. Non sono sicuro del perché il codice del proprietario del gruppo non abbia funzionato per me—probabilmente qualcosa legato a come ho configurato il plugin.
Ho scoperto che l’approccio AJAX funziona come metodo “MVP”. A proposito, credo che tu possa effettuare una chiamata API a [forum-url]/groups.json per ottenere tutti i gruppi del sito e poi iterare da lì, quindi non c’è bisogno di effettuare più chiamate.
Volevo chiederti:
–Per l’approccio AJAX/API JSON, sai come fare in modo che una funzione venga eseguita solo quando un utente visita una pagina specifica? Al momento, se inserisco il codice AJAX nella sezione della mia dashboard personalizzata, riesco a farlo funzionare, ma viene eseguito ogni volta che il sito viene caricato (mentre io voglio che venga eseguito solo quando viene caricata la pagina degli indici dei gruppi).
–Nel mio caso, sto usando AJAX soprattutto perché non devo solo mostrare i proprietari dei gruppi, ma anche alcune altre nuove caratteristiche dei gruppi che sto aggiungendo. Queste sarebbero come campi personalizzati del gruppo che sto cercando di recuperare e mostrare. Al momento, la versione “MVP” (mentre sto ancora imparando come funziona la codebase di Discourse) è salvarle in un database separato non di Discourse da cui le recupero e le aggiungo alla pagina degli indici dei gruppi.
Ovviamente, la soluzione più pulita sarebbe aggiungere le caratteristiche personalizzate ai gruppi nel database di Discourse e richiamarle. Sto solo cercando di valutare il tipo di operazione necessaria qui. Sarebbe necessario riscrivere molti file di Discourse (controller, modelli, template)?
Non esiste un concetto integrato di campo personalizzato per i gruppi come c’è per i campi utente personalizzati. Credo che dovresti creare un plugin che aggiunga tutti gli elementi necessari per far funzionare questa funzionalità.
Hai ragione. Stavo dimenticando: è qualcosa che memorizzo anche in un database separato, che chiamo ora tramite AJAX (e qualche altra magia).
Ottima idea: vedo cosa hai fatto con if ((url == "/") || (url == "/latest") ) in quel repository. Posso fare qualcosa di simile.
Sì: ho seguito quella guida, così come le altre che sono riuscito a trovare. È un’ottima guida, ma ho notato che il passaggio da questa guida (e dalle altre su meta) all’implementazione di questo tipo di personalizzazione è complicato. Queste personalizzazioni richiedono, per quanto riesco a capire, una vera comprensione di come template, controller e modelli si integrano nel codice di Discourse.
Digressione
Ember potrebbe essere un ottimo sistema per costruire app performanti, ma trovo difficile capire come i diversi file siano correlati. Ad esempio, trovare il template corretto in una vista nel repository GitHub non ti dice molto sugli altri template a cui quello si collega e, soprattutto, quali controller e altri modelli possano essere rilevanti. È possibile, ma è un processo lento, e per realizzare queste personalizzazioni è davvero necessario comprendere queste relazioni.
In Angular, come metodo alternativo, le parti dei componenti di vista sono solitamente raggruppate insieme in un file html, typescript e css, e gli altri file rilevanti sono chiaramente indicati in questi file (quindi i servizi in uso sono identificati nel file typescript e altri componenti inseriti sono chiaramente segnalati nel file html). Per quanto ne so, non è così che funziona la struttura Ember di Discourse (non per criticare quella struttura: è un’app molto stabile e altamente performante, ci vuole solo tempo per abituarsi).
Da qui l’uso di strumenti come AJAX per ottenere lo stesso risultato mentre continuo a cercare di capire come le parti di Discourse si integrano tra loro.