Personalizza le voci dell'elenco degli argomenti (ordinamento, raggruppamento, filtro) per una migliore organizzazione

TLDR:
Qual è il modo più veloce per cambiare la composizione di filteredTopics (riga 26)? Vorrei avere il pieno controllo su quali argomenti (con quali proprietà) vengono raccolti.

Ciao community,

Ho utilizzato il componente tema GitHub - discourse/discourse-topic-thumbnails: Display thumbnails in topic lists nel nostro ambiente ospitato e volevamo apportare ulteriori modifiche per soddisfare le nostre esigenze.

Invece di avere tutti gli argomenti mescolati in un unico grande blocco di elementi griglia, vorremmo portare un po’ di ordine.
Miriamo a quanto segue:
Inizialmente, vogliamo ordinare per visti/non visti, in secondo luogo vogliamo ordinare per categoria; poi, dopo di ciò, vorremmo raggrupparli per cronologia (e creare blocchi, ad esempio Oggi (tutti i post pertinenti di oggi), Ieri, La settimana scorsa.

Quindi la nostra lista di argomenti dovrebbe apparire così con 3 griglie distinte una sotto l’altra:

<OGGI, IERI, LA SETTIMANA SCORSA> rappresenta un raggruppamento

PINNED:
Argomento 20, Argomento 30, Argomento 40

NON VISTI:
<OGGI : [ART: Argomento 1, Argomento 2], [DESIGN: Argomento 4]> <IERI: [CONCETTO: Argomento 3], [ALTRA_CATEGORIA: Argomento 6, Argomento 11]> <LA SETTIMANA SCORSA: Argomento 8, Argomento 10>

VISTI:
<OGGI : [ART: Argomento 4, Argomento 12], [DESIGN: Argomento 4]> <IERI: [CGI: Argomento 13], [ALTRA_CATEGORIA: Argomento 16, Argomento 21]>, <LA SETTIMANA SCORSA: Argomento 18, Argomento 100>

La mia domanda principale sarebbe come posso creare/estendere la query che crea il set di risultati che viene poi iterato in

tramite filteredList.

Ho trovato un posto dove questo viene forse popolato ma non ero sicuro di come “estenderlo”. Sembra esserci un sistema di queryParam e alcune cose di route che possono influenzare un set di risultati ma non l’ho capito.

Qualcuno può indicarmi la direzione giusta?

Stiamo utilizzando il componente tema sopra menzionato, il che significa che siamo limitati in ciò che possiamo fare.
Mi sarebbe utile se qualcuno potesse mostrarmi come limitare filteredList solo ai post non letti, per esempio, potrei poi proseguire da lì.

Grazie mille!

CC @pfaffman

Solo per informazione, ma Topic List Thumbnails è un Theme component piuttosto che un plugin. :+1:

Sì, grazie, ne ero a conoscenza ma mi sono sfuggiti i termini corretti. Li sto correggendo.

Jammy, ho aggiunto un tldr. Hai qualche suggerimento su quella domanda abbreviata?
Grazie

Temo che questo vada oltre le mie competenze. :slight_smile:

Hai dato un’occhiata a come modificare le classi nella guida Developing Discourse Themes & Theme Components? Potrebbe esserci qualcosa lì che possa aiutarti. Una ricerca potrebbe anche portare ad alcuni esempi utili se ampli le tue parole chiave?

Sì, grazie Jammy, sono a conoscenza di queste cose e ho anche scritto alcuni plugin privati (o li ho estesi). La cosa qui però è che non capisco dove venga aggregata la lista e come funzioni la logica di QUERYING TOPICS o dove si trovi effettivamente. Se sapessi una delle due cose, potrei andare avanti.

Sto aggiungendo altre persone in CC poiché le ho viste nel codice Git.

Solo per tua informazione, ma è davvero una pessima etichetta di Meta taggare i membri del team in questo modo, quindi li ho rimossi per non creare un modello che altri potrebbero tentare di replicare. :+1:

Mi dispiace molto che il tuo argomento non abbia ottenuto maggiore risonanza. Non è qualcosa che conosco, quindi temo di non poter rispondere direttamente.

Hai fatto ulteriori progressi con la tua ricerca/i tuoi tentativi?

Pensavo di essere furbo mettendo in copia conoscenza le persone giuste :rofl:

E no, non sono andato avanti. Ho provato a mostrare l’elenco degli argomenti 3 volte e poi a nascondere gli argomenti indesiderati in ciascuno di essi, ma poi è entrata in gioco la funzionalità “carica altro” e gran parte del DOM è stata riscritta e i miei calcoli JS sono diventati troppo pesanti e hanno causato effetti strani.

Ho capito che devo farlo correttamente usando le API fornite da Discourse.

Ho fatto progressi significativi qui e ho alcune altre domande lungo il percorso:

  • Esiste un endpoint API che posso utilizzare per ottenere tutti gli argomenti fissati? Simile a /latest.json o /top.json?
  • Esiste un comando JS (supponendo che mi trovi in un plugin) che posso utilizzare per forzare il re-rendering dell’elenco degli argomenti, dopo aver apportato una modifica di stato agli elementi dell’elenco degli argomenti, in modo che la modifica venga immediatamente riflessa? Immagino di dover lavorare con un osservatore su topics.?

Inoltre, ho trovato il seguente articolo che contiene tutto ciò di cui ho bisogno per personalizzare l’elenco degli argomenti che desidero.

https://meta.discourse.org/t/how-to-add-a-featured-topic-list-to-your-discourse-homepage/132949

Sono lieto che tu abbia fatto dei progressi: sei chiaramente in un territorio inesplorato!

Gli argomenti bloccati possono essere ottenuti interrogando /search.json?expanded=true&q=in%3Apinned
Utilizzo della ricerca senza una parola chiave di ricerca effettiva.

Questo restituisce solo un elenco di ID di argomenti o, diciamo, un set di dati di argomenti semplificato. Dovresti effettuare richieste ajax di follow-up a /t/${topic.id}.json per ottenere il set di dati completo relativo a un argomento.

Sono ancora interessato a come posso forzare un re-render di un elenco di argomenti tramite JS.