Nell’ambito della nostra continua ricerca di standardizzazione dei sistemi di rendering nel codebase di Discourse, stiamo sostituendo l’implementazione della topic-list.
In precedenza, questo utilizzava un approccio ‘raw handlebars’ (.hbr), e poteva essere personalizzato tramite override di template e raw-plugin-outlets. La nuova implementazione della topic-list utilizza i moderni componenti Glimmer, ed è stata costruita da zero per essere personalizzabile in modi sostenibili.
La nuova implementazione è ora disponibile dietro l’impostazione glimmer_topic_list_mode.
disabled: utilizza la legacy topic-list “raw handlebars”auto: rileverà la compatibilità dei tuoi plugin e temi attuali. Se alcuni sono incompatibili, utilizzerà il sistema legacy; altrimenti utilizzerà la nuova implementazione.enabled: utilizzerà la nuova implementazione della topic-list. Se hai plugin o temi incompatibili, il tuo sito potrebbe bloccarsi.
Abbiamo già aggiornato la maggior parte dei nostri temi e plugin ufficiali per essere compatibili con il nuovo menu. Tuttavia, se utilizzi plugin, temi o componenti tema di terze parti che personalizzano la topic-list, sarà necessario aggiornarli.
Verranno stampati avvisi nella console del browser che identificheranno la fonte dell’incompatibilità.
Tempistiche di rilascio
Queste sono stime approssimative soggette a modifiche
Q4 2024:
implementazione core completata
aggiornamento temi/plugin ufficiali (in corso)
abilitato su Meta
pubblicati consigli per l’aggiornamento
Q1 2025:
-
aggiornamento temi/plugin ufficiali -
glimmer_topic_list_modeimpostato di default suauto; abilitati messaggi di deprecazione nella console -
le deprecazioni attiveranno un banner di avviso per gli amministratori per eventuali problemi rimanenti -
i plugin e i temi di terze parti dovrebbero essere aggiornati
-
1° marzo - abilitazione della nuova topic-list per tutti i siti. L’impostazione predefinita per l’impostazione del sito sarà cambiata in enabled, ma sarà ancora possibile tornare a ‘disabled’
Q2 2025
dopo il 1° aprile - rimozione definitiva della modalità legacy e del codice associato
Cosa significa per me?
Se il tuo plugin o tema ha file ‘raw handlebars’ (con estensione .hbr o .raw.hbs), questi dovranno essere aggiornati per essere compatibili con la nuova versione. I normali file .hbs per componenti/route Ember non sono interessati da questa modifica.
Saranno richiesti aggiornamenti anche se utilizzi modifyClass su component:topic-list o component:topic-list-item.
Se il tuo sito presenta una di queste personalizzazioni incompatibili, verranno stampati messaggi di avviso nella console degli sviluppatori del browser, incluse informazioni su quale tema/plugin ne sia la causa.
Quali sono le sostituzioni?
Alcuni dei vecchi raw-plugin-outlets sono stati convertiti in regolari Plugin Outlets. Questi possono essere aggiornati in modo 1:1.
Le personalizzazioni più avanzate dovranno essere valutate caso per caso. La nuova topic-list dispone di una serie di nuove API per una personalizzazione semplice e robusta. Scopri di più qui:
Ecco alcuni esempi:
-
discourse-assignintroduce una nuova colonna a una specifica topic-list -
discourse-calendarutilizza uno dei nuovi plugin outlets per visualizzare il badge della data dell’evento -
discourse-solvedutilizza un nuovo valueTransformer per sostituire il precedente modifyClass
Cosa succede alle altre personalizzazioni?
Se la tua personalizzazione non può essere realizzata utilizzando le nuove API che abbiamo introdotto, faccelo sapere creando un nuovo topic Dev per discuterne.
Sono un autore di plugin/temi. Come aggiorno un tema/plugin per supportare sia la vecchia che la nuova topic list durante la transizione?
I nuovi plugin outlets vengono renderizzati sia nella vecchia che nella nuova implementazione della topic list. Quindi: quando avrai implementato la nuova, semplicemente elimina il vecchio connettore raw-plugin-outlet.
Per le personalizzazioni basate su DAG che sostituiscono gli override di template o gli outlet non modernizzati, dovrai mantenere entrambe le implementazioni durante il periodo di transizione.
Una volta che il tuo tema/plugin supporterà entrambe le implementazioni, potrai aggiungere questo commento magico in cima a tutti i tuoi file .hbr:
{{!-- has-modern-replacement --}}
Questo silenzierà i messaggi di deprecazione e consentirà l’utilizzo della nuova implementazione quando è in modalità “auto”.


