web-dev-qa-db-fra.com

Créer une hiérarchie personnalisée dans le module de menu

J'ai la structure de menu suivante

Books [/books]
    New Books [/books/new-books]
        Fiction [/books/new-books/fiction]
        Sci Fi[/books/new-books/sci-fi]

Le menu Livres contient Livres (le menu lui-même) comme premier niveau, Nouveaux livres comme deuxième niveau et Fiction et Sci Fi comme troisième niveau.

Ce que j'essaie de réaliser est le suivant. La structure d'URL pour l'élément de menu 'Sci Fi' reste essentiellement la même mais visuellement, elle se trouve sous Fiction.

Books [/books]
    New Books [/books/new-books]
        Fiction [/books/new-books/fiction]
            Sci Fi[/books/new-books/sci-fi]

Il y avait deux façons dont je pensais pouvoir (une grande puissance à ce niveau) être capable d'y parvenir, mais les deux semblent être un moyen très "laid" de le faire, mais je ne peux penser à aucun autre moyen d'y parvenir.

Méthode 1: Création d'un plug-in de contenu permettant de vérifier un nom de classe prédéfini dans l'élément de la liste de menus -> obtenir le lien parent -> supprimer tous ces éléments de menu et le placer sous un autre élément parent prédéfini.

Méthode 2: à l'aide de jQuery, obtenez tous les éléments de la liste avec une classe définie (dans le "quatrième menu" de jsfiddle), supprimez-le de sa position existante et ajoutez-le au parent prédéfini (à l'aide de la classe/id sur l'élément de menu href ).

Comme je l'ai déjà mentionné, les deux méthodes semblent très convoluées, alors je me demandais s'il existait un meilleur moyen d'y parvenir?

J'ai créé un jsfiddle qui rend un peu plus clair ce que j'essaie de réaliser.

1
sifu

Vous pouvez toujours utiliser des remplacements de modèle pour obtenir un rendu modifié, mod_menu ne fait pas exception. Mais un meilleur moyen pourrait être l'utilisation de Menu Item Aliases. Vous pouvez trouver ce type d'élément de menu sous "Liens système" si vous créez ou modifiez un élément de menu.

UNE Menu Item Alias utilisera l'URL de son élément de menu cible. Une structure possible pourrait ressembler à l'exemple suivant:

Basic Menu, which may or may not be displayed:
- RealA (type: any) => /a
- - RealB (type: any) => /a/b
- - RealC (type: any) => /a/c

Special Menu, which will be displayed through mod_menu
- AliasC (type: alias, target: Realc) => /a/c
- - AliasA (type: alias, target: RealA) => /a
- AliasB (type: alias, target: RealB) => /a/b
2
Nils Rückmann