按主题数量排列类别

我不知道是否有人考虑过按主题数量对主页上的类别进行排序?

示例

A 类有 100 个主题
B 类有 50 个主题
C 类有 20 个主题。

主页上的顺序将是 ABC。如果 C 的主题突然变为 120 个,顺序将是 CAB。

这是否可以合理实现?是否有可能实现滞后,以便类别不会过于频繁地变动?

您好,

如果您感兴趣,我可以做一个小组件。可以确定的是,您说的是分类页面(/categories),对吗?

这是一个好意的提议。然而,从我们的角度来看,这并不足以购买作为主题组件。我认为这仍然是 Discourse 中一个不错的功能。我觉得它能在现有的按最新排序(这会太频繁地改变顺序)和完全固定的布局之间取得很好的平衡。

1 个赞

不,不,免费的 :slight_smile:

编辑:
您可以在 主题组件 中安装此脚本。
它仅在页面本身上排列类别列表的项。
这不会影响任何模板或内部,以保持更好的兼容性。
根据您的主题,可能需要进行调整。
如果对您有效,请告诉我。

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 {
        // boxes doesn't have a count displayed
    }
});
</script>