Continuando a discussão de Como dividir o fórum em duas partes principais (geral/grupos) e como exibir apenas subcategorias nas quais posso criar uma nova postagem?:
Olá a todos,
Aqui está um componente de tema que faz algo que tenho querido fazer há muito tempo, mas gostaria de comentários sobre o código para melhorá-lo ou sugestões.
Não acredito que o código seja muito bom, então não quero recomendá-lo antes de ser verificado por outra pessoa.
O que ele faz
Oculta com CSS todos os tópicos para os quais o usuário tem restrição de permissão de categoria nas páginas escolhidas.
Repositório
Link do repositório
framagit.org/oca/discourse-theme-shroud-subcategories
Motivação
Tenho uma comunidade com muitos grupos e quero que as pessoas ignorem pacificamente o que pertence a grupos diferentes dos deles. Não quero restringir o acesso ao conteúdo, apenas não quero que ele apareça na página principal. Elas devem poder acessá-lo indo até ele, escolhendo entrar especificamente nessa categoria (por exemplo, para saber o que está sendo discutido ali). Obviamente, a ferramenta adequada seria a função de assistir/ignorar, mas como a interface exige mais de 2 cliques para configurá-la, ninguém na comunidade a usa. Alguma melhoria na página de Categoria poderia resolver o problema, mas isso está além das minhas habilidades.
Então, uso o que a interface oferece que é simples o suficiente para eles: a página do grupo. Na mesma página são exibidos todos os grupos aos quais eles podem acessar, livremente ou não, e suas descrições. Isso é perfeito, eles só precisam clicar e escolhê-los. A página do grupo está muito escondida para eles (dentro do menu hambúrguer), então eu poderia colocar um grande botão de link na página principal.
Agora, preciso vincular a associação ao grupo e a exibição das postagens da categoria.
Como funciona
O truque que usei foi configurar a permissão de categoria como:
- todos: ler, escrever
- aquele grupo: iniciar uma mensagem, ler, escrever
e, em seguida, para cada tópico na lista, verificar se há uma restrição de categoria e, se houver, adicionar uma classe not-in-group ao elemento do tópico.
Depois, o CSS adiciona display:none conforme necessário.
Interface (UI)
O administrador pode escolher as páginas nas quais esse comportamento é efetivo. Isso não deve ser feito na página de categoria porque, por definição, é lá que queremos acessar o conteúdo. No meu site, todos esses grupos são subcategorias que estão ocultas na página latest; acessamos por meio da página /c/groups/, então é essa página que é usada.
Melhorias
- Poder selecionar categorias pai das categorias filtradas (para que qualquer categoria que não seja filha desta esteja segura de ser ignorada)
- Adicionar tags, de modo que, se um tópico tiver essa tag, ele não será removido.
