Suite à la discussion sur Comment diviser le forum en deux parties principales (général/groupes) et afficher uniquement les sous-catégories dans lesquelles je peux créer un nouveau sujet ? :
Salut à tous,
Voici un composant de thème qui réalise une fonctionnalité que je souhaitais mettre en place depuis longtemps. J’aimerais cependant avoir vos commentaires sur le code pour l’améliorer, ou vos suggestions.
Je ne pense pas que le code soit très bon, aussi je ne souhaite pas le recommander avant qu’il n’ait été examiné par quelqu’un d’autre.
Ce qu’il fait
Masquer via CSS tous les sujets pour lesquels l’utilisateur fait l’objet d’une restriction de permission de catégorie sur les pages choisies.
Dépôt
Lien vers le dépôt
framagit.org/oca/discourse-theme-shroud-subcategories
Motivation
Je gère une communauté avec de nombreux groupes et je souhaite que les gens ignorent paisiblement ce qui relève d’autres groupes que le leur. Je ne veux pas restreindre l’accès au contenu, je ne veux simplement pas qu’il apparaisse sur la page principale. Ils doivent pouvoir y accéder en y allant volontairement, en choisissant spécifiquement cette catégorie (par exemple, pour savoir ce qui s’y discute). Évidemment, l’outil approprié serait la fonction de suivi/ignorance, mais comme l’interface nécessite plus de deux clics pour la configurer, personne dans la communauté ne l’utilise. Certaines améliorations sur la page Catégorie pourraient faire l’affaire, mais elles dépassent mes compétences.
J’utilise donc ce qui est suffisamment simple pour eux : la page des groupes. Sur la même page sont affichés tous les groupes auxquels ils peuvent accéder, librement ou non, ainsi que leur description. C’est parfait, ils n’ont qu’à cliquer et les choisir. La page des groupes est trop cachée pour eux (dans le menu hamburger), alors je pourrais placer un gros bouton lien sur la page principale.
Maintenant, je dois lier l’appartenance au groupe et l’affichage des publications de catégorie.
Fonctionnement
L’astuce que j’ai utilisée consiste à configurer les permissions de catégorie comme suit :
- tout le monde : lire, écrire
- ce groupe : démarrer un message, lire, écrire
Ensuite, pour chaque sujet de la liste, je vérifie s’il existe une restriction de catégorie, et si oui, j’ajoute une classe not-in-group à l’élément du sujet.
Ensuite, le CSS ajoute display:none en conséquence.
Interface utilisateur
L’administrateur peut choisir les pages où ce comportement est actif. Cela ne devrait pas être fait sur la page de catégorie car, par définition, c’est là que nous voulons accéder au contenu. Sur mon site, tous ces groupes sont des sous-catégories masquées sur la page latest ; nous y accédons via la page /c/groups/, donc c’est cette page qui est utilisée.
Améliorations
- Pouvoir sélectionner les catégories parentes des catégories filtrées (ainsi, toute catégorie qui n’est pas une enfant de celle-ci sera épargnée).
- Ajouter des balises, afin que si un sujet possède cette balise, il ne soit pas supprimé.
