Opzione per nascondere le categorie di 3° livello nella homepage delle categorie senza perdere il layout

Utilizziamo una struttura di categorie profonda a due livelli (tutte le biblioteche pubbliche della nostra città con i loro singoli filiali, più una biblioteca centrale con le proprie categorie di primo livello). Recentemente, abbiamo avuto bisogno di introdurre un terzo livello di annidamento in alcuni rami di categorie.

Non appena una categoria anywhere nell’albero ha una categoria nipote, la homepage delle categorie cambia il suo modalità di rendering: invece della griglia compatta di riquadri (categoria genitore con i suoi figli diretti elencati all’interno), tutte le categorie vengono renderizzate come un lungo elenco a colonna singola. Questo rende la homepage estremamente lunga e difficile da scorrere per i nostri ~1.200 utenti staff.

Sembra che questo sia governato dalla proprietà isGrandParent descritta in questo thread correlato: When you add an additional nesting level, all categories, including child categories, are displayed on the categories page

Cosa vorremmo

La nostra opzione preferita: un modo per mantenere il layout standard “a riquadri” della homepage anche quando una categoria ha un terzo livello di annidamento — ad esempio, semplicemente non mostrando le categorie nipoti sulla homepage (sarebbero comunque raggiungibili tramite la pagina della categoria genitore).

In alternativa, una vista nativa, espandibile/collassabile per le categorie con nipoti direttamente sulla homepage delle categorie, così gli utenti possono espandere solo i rami di cui hanno bisogno invece di avere tutto elencato in modo piatto.

Perché chiediamo una soluzione nativa/ufficiale

Siamo consapevoli che esistono workaround tramite componenti tematici/CSS o JS (ad esempio, sovrascrivendo isGrandParent tramite modifyClass) discussi nel thread più vecchio linkato sopra. Preferiremmo non seguire questa strada: non abbiamo competenze front-end approfondite interne, e siamo preoccupati per effetti collaterali imprevisti o rotture negli aggiornamenti futuri di Discourse se sovrascrivessimo noi stessi la logica di rendering core. Un’impostazione supportata o un’opzione ufficiale sarebbe molto più sicura per noi da mantenere a lungo termine.

Siamo consapevoli che Discourse non raccomanda ufficialmente un annidamento profondo, ma per la nostra struttura organizzativa (multiple istituzioni, ciascuna con diverse sedi fisiche, ciascuna con bisogno del proprio spazio) non è opzionale per noi.

Un modo supportato per controllare la visualizzazione della homepage in questi casi aiuterebbe molto e siamo sicuri che, dal 2021, ci possa essere bisogno di un terzo livello nascosto anche in altre organizzazioni, vero?

Screenshot allegati: il nostro attuale layout homepage a due livelli

e come si rompe attualmente una volta introdotto un terzo livello.

5 Mi Piace

Non sono sicuro, ma questa Customization > Theme component potrebbe essere in grado di fare ciò che stai cercando, oppure potrebbe essere modificata a tal fine. Forse DeV sarebbe disposta ad aggiungere anche questa funzionalità.

1 Mi Piace

Si tratta di una richiesta ragionevole: può essere difficile bilanciare il layout della pagina /categories quando ci sono solo poche categorie con più livelli di sottocategorie.

Non desideriamo più che le persone utilizzino modifyClass, perché, come hai menzionato, mantenere questo tipo di override può richiedere uno sforzo di sviluppo non trascurabile.

Ora disponiamo di metodi di personalizzazione più recenti con cui possiamo lavorare e che sono più facili da mantenere stabili. In questo caso, un value transformer può essere d’aiuto. Ne ho appena aggiunto uno qui, che sarà disponibile nei prossimi aggiornamenti: DEV: Add a category-list-subcategories value transformer - Pull Request #42804 - discourse/discourse - GitHub

Un semplice esempio è il seguente:

api.registerValueTransformer(
  "category-list-subcategories",
  ({ value, context }) =>
  context.page === "categories" && context.category.level >= 1 ? [] : value
);

Questo mostrerà solo un livello di sottocategorie. Ora sono disponibili altre opzioni tramite il transformer, quindi ho creato un componente di tema che possiamo mantenere per supportarle.

Pertanto, una volta aggiornato Discourse, puoi installarlo per controllare quante sottocategorie vengano visualizzate su /categories e in altre liste di categorie:

Imposta Categories page depth su 2 per nascondere tutte le categorie di terzo livello (nipoti).

2 Mi Piace

Ciao, grazie mille!

Riesci a prevedere come si comporteranno le categorie di livello 2? Ad esempio, se torneranno a occupare la loro posizione originale l’una accanto all’altra?

1 Mi Piace

Sì, l’ordine resterà lo stesso… questo è essenzialmente un metodo supportato per sovrascrivere isGrandParent

Ecco un confronto prima/dopo dal mio sito di test

3 Mi Piace