Organisation des catégories par nombre de sujets

Je me demande s’il a déjà été envisagé de trier l’ordre des catégories sur la page principale par nombre de sujets ?

Exemple

La catégorie A a 100 sujets
La catégorie B a 50 sujets
La catégorie C a 20 sujets.

L’ordre sur la page principale serait ABC. Si C passe soudainement à 120 sujets, l’ordre serait CAB.

Serait-ce raisonnablement réalisable ? Une hystérésis serait-elle même possible pour que les catégories ne changent pas trop souvent ?

Salut,

Je peux créer un petit composant si cela vous intéresse. Pour être sûr, vous parlez bien de la page des catégories (/categories) ?

C’est une offre aimable. Cependant, de notre côté, ce n’est pas assez nécessaire pour l’acheter en tant que composant de thème. Je pense que ce serait toujours une fonctionnalité intéressante à avoir dans Discourse en général. J’ai l’impression que ce serait un bon équilibre entre le tri existant par le plus récent (qui change l’ordre trop souvent) et une mise en page complètement fixe.

1 « J'aime »

Non, non, gratuitement :slight_smile:.

EDIT :
Vous pouvez installer ce script dans un composant de thème.
Il organise les éléments de la liste des catégories uniquement sur la page elle-même.
Cela n’affecte aucun modèle ou interne afin de maintenir une meilleure compatibilité.
Selon votre thème, des ajustements peuvent être nécessaires.

Faites-moi savoir si cela fonctionne pour vous.

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 {
        // les boîtes n'affichent pas de nombre
    }
});
</script>