Tris20
(Tristan)
Março 27, 2023, 12:28pm
1
Estou imaginando se já foi considerado a possibilidade de também ordenar as categorias na página principal em ordem de número de tópicos?
Exemplo
Categoria A tem 100 tópicos
Categoria B tem 50 tópicos
Categoria C tem 20 tópicos.
A ordem na página principal seria ABC. Se C de repente mudar para 120 tópicos, a ordem seria CAB.
Seria razoavelmente alcançável? Seria possível uma Histerese para que as Categorias não mudassem de posição com muita frequência?
Olá,
Posso criar um pequeno componente se você estiver interessado. Para ter certeza, você está falando sobre a página de categorias (/categories), certo?
Tris20
(Tristan)
Março 28, 2023, 7:37am
3
Essa é uma oferta gentil. No entanto, do nosso lado, isso não é necessário o suficiente para ser comprado como um componente de tema. Acho que ainda seria um bom recurso para ter no Discourse em geral. Sinto que seria um bom equilíbrio entre a ordem existente por mais recente (que muda a ordem com muita frequência) e um layout completamente fixo.
1 curtida
Não, não, de graça .
EDIT:
Você pode instalar este script em um componente de tema .
Ele organiza os itens da lista de categorias apenas na página em si.
Isso não afeta nenhum template ou interno para manter uma melhor compatibilidade.
Dependendo do seu tema, pode exigir ajustes.
Me diga se funciona para você.
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 {
// caixas não têm contagem exibida
}
});
</script>