Tout est possible en principe.
Par exemple, j’ai précédemment créé une hiérarchie de catégories à trois niveaux qui prend également en charge les intersections multiples de tags au niveau des catégories.
Structure de route pour une hiérarchie de catégories à trois niveaux avec intersections multiples de tags
scope "/multi" do
constraints(tag_id: /[^\/]+?/, format: /json|rss/) do
get '/c/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_category_show'
get '/c/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_parent_category_category_show'
get '/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags' => 'tags#show', as: 'tags_grandparent_category_category_show'
Discourse.filters.each do |filter|
get "/c/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_category_show_#{filter}"
get "/c/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_parent_category_category_show_#{filter}"
get "/c/:grandparent_category/:parent_category/:category/t/:tag_id/*tags/l/#{filter}" => "tags#show_#{filter}", as: "tags_grandparent_category_category_show_#{filter}"
end
end
end
Ceci est plus complexe que ce que je pense que vous souhaitez faire, mais ce n’est pas durable à moins que vous ne soyez prêt à investir beaucoup de temps ou de ressources pour le prendre en charge. Il est probable que cela se brise à un moment donné lorsque Discourse standard évoluera.
Dans ce contexte, il y a deux choses à comprendre concernant la structure de route des catégories et des tags dans Discourse standard :
-
Les intersections multiples de tags ne sont possibles qu’à l’échelle du site ; pas au niveau des catégories. Autrement dit, il n’existe pas de routes dans Discourse standard pour afficher une liste de sujets contenant des sujets d’une catégorie spécifique et portant plus d’un tag spécifique. Si vous le souhaitez, vous devrez ajouter cette route.
-
Les intersections de catégories ne sont pas possibles. Autrement dit, il n’existe pas de route dans Discourse pour afficher des sujets provenant de deux catégories au même niveau (c’est-à-dire deux catégories parentes ou deux catégories enfants).
Vous pouvez tout de même mettre en place un système à quatre niveaux (ce qui semble être votre objectif) sans ajouter de modifications significatives côté serveur.
Par exemple, vous pourriez utiliser exclusivement des tags pour représenter les quatre niveaux. https://thepavilion.io/tags/intersection/events/bug/to-do/high représente l’intersection des tags events, bug, to-do et high sur Pavilion. Vous pourriez avoir quatre menus déroulants, un pour chaque groupe de tags auquel ces tags appartiennent, par exemple :
[plugin] [type] [status] [importance]
Une fois que vous aurez défini comment structurer votre hiérarchie dans le cadre de la structure de route existante de Discourse, le reste des éléments que vous avez listés ne sont que des modifications côté client et sont (relativement) simples à mettre en œuvre.