Organizando categorías por número de temas

¿Alguna vez se ha considerado la posibilidad de ordenar también las categorías en la página principal en orden por número de temas?

Ejemplo

La categoría A tiene 100 temas
La categoría B tiene 50 temas
La categoría C tiene 20 temas.

El orden en la página principal sería ABC. Si C cambia repentinamente a 120 temas, el orden sería CAB.

¿Sería razonablemente factible? ¿Sería posible incluso una histéresis para que las categorías no se muevan con demasiada frecuencia?

Hola,

Puedo crear un pequeño componente si estás interesado. Para estar seguro, ¿te refieres a la página de categorías (/categories)?

Es una oferta amable. Sin embargo, por nuestra parte, no es lo suficientemente necesario como para comprarlo como un componente de tema. Creo que seguiría siendo una buena característica para tener en Discourse en general. Siento que sería un buen equilibrio entre el orden existente por lo más reciente (que cambia el orden con demasiada frecuencia) y un diseño completamente fijo.

1 me gusta

No, no, gratis :slight_smile:.

EDIT:
Puedes instalar este script en un componente de tema.
Organiza los elementos de la lista de categorías solo en la página.
Esto no afecta a ninguna plantilla ni a elementos internos para mantener una mejor compatibilidad.
Dependiendo de tu tema, podría requerir ajustes.

Avísame si te funciona.

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 {
        // las cajas no tienen un recuento mostrado
    }
});
</script>