Ordinare le categorie per numero di argomenti

Mi chiedo se sia mai stato preso in considerazione di ordinare anche le categorie nella pagina principale in base al numero di argomenti?

Esempio

La categoria A ha 100 argomenti
La categoria B ha 50 argomenti
La categoria C ha 20 argomenti.

L’ordine nella pagina principale sarebbe ABC. Se C cambiasse improvvisamente a 120 argomenti, l’ordine sarebbe CAB.

Sarebbe ragionevolmente realizzabile? Sarebbe possibile anche un’isteresi in modo che le categorie non si spostino troppo spesso?

Ciao,

Posso creare un piccolo componente se sei interessato. Per essere sicuro, ti stai riferendo alla pagina delle categorie (/categories), giusto?

È un’offerta gentile. Tuttavia, dal nostro punto di vista, non è abbastanza necessario da acquistare come componente tematico. Penso che sarebbe comunque una bella funzionalità da avere in Discourse in generale. Sento che sarebbe un buon equilibrio tra l’ordinamento esistente per più recente (che cambia l’ordine troppo spesso) e un layout completamente fisso.

1 Mi Piace

No, no, gratis :slight_smile:.

MODIFICA:

Puoi installare questo script in un componente del tema.

Organizza gli elementi dell’elenco delle categorie solo sulla pagina stessa.
Questo non influisce su alcun template o interno per mantenere una migliore compatibilità.
A seconda del tuo tema, potrebbero essere necessarie delle modifiche.

Fammi sapere se funziona per te.

js

<script type="text/discourse-plugin" version="0.8">

api.onPageChange((url, title) => {
    const { defaultHomepage } = require('discourse/lib/utilities');

    if (url !== '/categories' && (url !== '/' || defaultHomepage() !== 'categories')) {
        return;
    }
    
    const desktop_category_page_style = api.container.lookup('service:site-settings').desktop_category_page_style;
    
    const sort = ({parent, nodes, selector}) => {
        if (!parent || !nodes.length) {
            return
        }

        Array.from(nodes).sort((a, b) => {
            const valueA = a.querySelector(selector).textContent;
            const valueB = b.querySelector(selector).textContent;
            
            return valueB - valueA;
            
        })
        .forEach(row => parent.appendChild(row));
    }
    
    if (desktop_category_page_style.startsWith('categories')) {
        const parent = document.querySelector('.category-list tbody[aria-labelledby="categories-only-category"]');
        
        sort({
            parent: parent, 
            nodes: parent?.querySelectorAll('tr'), 
            selector: 'td.topics span.value'
        })
    }
    else if (desktop_category_page_style === 'subcategories_with_featured_topics') {
        const childs = document.querySelectorAll('table.category-list');
        
        sort({
            parent: childs[0]?.parentElement, 
            nodes: childs, 
            selector: 'th.parent-category span.value'
        })

    } else {
        // le caselle non hanno un conteggio visualizzato
    }
});
</script>