Option de masquer les catégories de 3e niveau sur la page d'accueil des catégories sans perdre la mise en page

Nous utilisons une structure de catégories profonde à deux niveaux (toutes les bibliothèques publiques de notre ville avec leurs succursales individuelles, plus une bibliothèque centrale avec ses propres catégories de premier niveau). Récemment, nous avons eu besoin d’introduire un troisième niveau d’imbrication dans certaines branches de catégories.

Dès qu’une catégorie, n’importe où dans l’arborescence, possède une catégorie petite-fille, la page d’accueil des catégories change son mode d’affichage : au lieu de la grille compacte de boîtes (catégorie parente avec ses enfants directs répertoriés à l’intérieur), toutes les catégories sont affichées sous forme d’une longue liste à une seule colonne. Cela rend la page d’accueil extrêmement longue et difficile à parcourir pour nos ~1 200 utilisateurs du personnel.

Cela semble être régi par la propriété isGrandParent décrite dans ce fil connexe : When you add an additional nesting level, all categories, including child categories, are displayed on the categories page

Ce que nous souhaiterions

Notre option préférée : un moyen de conserver la mise en page standard de la page d’accueil en « boîtes » même lorsqu’une catégorie possède un troisième niveau d’imbrication — par exemple, en ne montrant simplement pas les catégories petites-filles sur la page d’accueil (elles resteraient accessibles via la page de la catégorie parente).

Alternativement, une vue native extensible/réductible pour les catégories ayant des petites-filles directement sur la page d’accueil des catégories, afin que les utilisateurs puissent développer uniquement les branches dont ils ont besoin au lieu d’avoir tout listé à plat.

Pourquoi nous demandons une solution native/officielle

Nous sommes conscients qu’il existe des solutions de contournement via des composants de thème/CSS ou JS (par exemple, en écrasant isGrandParent via modifyClass) discutées dans l’ancien fil lié ci-dessus. Nous préférerions ne pas emprunter cette voie : nous n’avons pas une expertise approfondie en front-end en interne, et nous craignons des effets secondaires inattendus ou des dysfonctionnements lors des mises à jour futures de Discourse si nous écrasons nous-mêmes la logique de rendu principale. Un paramètre pris en charge ou une option officielle serait beaucoup plus sûr pour nous à maintenir à long terme.

Nous sommes conscients que Discourse ne recommande pas officiellement une imbrication profonde, mais pour notre structure organisationnelle (plusieurs institutions, chacune avec plusieurs sites physiques, ayant chacun besoin de leur propre espace), ce n’est pas optionnel pour nous.

Un moyen pris en charge de contrôler l’affichage de la page d’accueil pour ces cas serait très utile et nous sommes sûrs, depuis 2021, qu’il pourrait y avoir besoin d’un 3e niveau caché dans d’autres organisations aussi ?

Captures d’écran jointes : notre mise en page actuelle de la page d’accueil à 2 niveaux

et comment elle se brise actuellement dès qu’un 3e niveau est introduit.

5 « J'aime »

Je ne suis pas certain, mais ce Customization > Theme component pourrait peut-être répondre à vos besoins, ou du moins y contribuer après modification. Le développeur serait peut-être également ouvert à l’ajout de cette fonctionnalité.

1 « J'aime »

C’est une demande raisonnable, car il peut être difficile d’équilibrer la mise en page de la page /categories lorsqu’il n’y a que quelques catégories avec plusieurs niveaux de sous-catégories.

Nous ne souhaitons vraiment plus que les gens utilisent modifyClass, car, comme vous l’avez mentionné, le maintien de ce type de surcharge peut demander un certain effort de développement.

Nous disposons désormais de méthodes de personnalisation plus récentes, plus faciles à maintenir stables. Dans ce cas, un transformateur de valeur peut aider. J’en viens d’ajouter un ici, qui sera disponible dans les prochaines mises à jour : DEV: Add a category-list-subcategories value transformer - Pull Request #42804 - discourse/discourse - GitHub

La démonstration simple ressemble à ceci :

api.registerValueTransformer(
  "category-list-subcategories",
  ({ value, context }) =>
  context.page === "categories" && context.category.level >= 1 ? [] : value
);

Cela n’affichera qu’un seul niveau de sous-catégories. D’autres options sont désormais disponibles grâce au transformateur, j’ai donc créé un composant de thème que nous pouvons maintenir pour les prendre en charge.

Ainsi, une fois que Discourse sera mis à jour, vous pourrez l’installer pour contrôler le nombre de sous-catégories affichées sur /categories et sur d’autres listes de catégories :

Définissez Categories page depth sur 2 pour masquer toutes les sous-catégories de niveau arrière-petits-enfants.

2 « J'aime »

Salut, merci beaucoup !

Peux-tu prédire comment les catégories de niveau 2 se comporteront ? Par exemple, est-ce qu’elles reviendront à leur ordre d’origine, les unes à côté des autres ?

1 « J'aime »

Oui, l’ordre restera le même… c’est essentiellement une méthode prise en charge pour remplacer isGrandParent

Voici un avant/après depuis mon site de test

3 « J'aime »