Menus

Créez enfin vos menus facilement !

Introduction

Lorsqu’on ne se sert pas du plugin ’Menus’, on est obligé de définir tous ses menus dans les squelettes, ce qui fait que l’administration du site n’a pas directement la main dessus, lorsqu’un changement est nécessaire, il faut en faire la demande à la personne en charge des squelettes.

De plus, lorsqu’on veut des liens statiques (un lien vers un article précis, ou vers une page précise, ou vers un site externe) il faut les écrire en dur dans le squelette du menu.

Le but du plugin ’Menus’ est donc de permettre de facilement élaborer des menus au moyen d’une interface conviviale, directement dans la partie privée.

Attention ! Ce plugin ne s’occupe pas de la manière dont seront affichés les menus. Il permet de les créer facilement et d’en générer le HTML.

Pour l’affichage, voyez avec votre thème ou des plugins spécifiques tels que Menu animé déroulant, Menu Déroulant 2, Menu Accordéon 2 ou Menu jQuery Superfish.

Installation

Comme n’importe quel plugin.

Création d’un menu

Le plugin ajoute un lien dans le bandeau de SPIP :

Capture d'écran de l'ffichage du plugin menu dans le menu de l'espace privé de SPIP.

La page liste tous vos menus, et vous propose d’en créer un nouveau :

D’abord vous devez identifier votre menu. Il faut lui donner un titre, ainsi qu’un mot-clé qui vous permettra de l’appeler facilement. En effet, vous ne pouvez pas prévoir à l’avance dans vos squelettes le numéro du menu. Grâce à ce mot-clé identifiant, vous n’avez donc pas à modifier vos squelettes à chaque fois. Vous pouvez également saisir une classe qui sera ajoutée au premier élément ul du menu généré. Ceci peut permettre d’activer la gestion de l’affichage par un plugin tiers.

Vous pouvez alors commencer à construire le menu en ajoutant des entrées :

Les différents types d’entrées

Les Menus sont fournis pour l’instant avec plus de dix types d’entrées qui permettent déjà de construire la plupart des menus facilement.

N’hésitez pas à en proposer d’autres !

Voici la description de quelques uns des types d’entrées disponibles :

-  Lien arbitraire : vous pouvez créer des liens vers ce que vous voulez en donnant une adresse et un titre.

-  Objet de SPIP : crée un lien vers n’importe quel objet éditorial de SPIP. Ça peut être un article, une rubrique ou n’importe quoi venant d’un plugin.

-  Liste dynamique de rubriques et d’articles : vous pouvez afficher les rubriques de SPIP, y compris de manière arborescente. Pour cela, il suffit de définir la rubrique dans laquelle il faut commencer la liste, le niveau maximum de sous-rubriques, les exclusions éventuelles, le type de tri... Vous pouvez aussi inclure les articles dans l’arborescence, limiter leur nombre, en gérer le tri...

Détails des options d’une entrée de menu : Liste ou arborescence de rubriques et d’articles (avec beaucoup d’options)

Modification des entrées

Lorsque vous avez déjà ajouté des choses, vous obtenez alors la liste des entrées sous cette forme :

Vous pouvez alors déplacer les entrées pour modifier leur ordre, les supprimer, changer leurs paramètres et créer des sous-menus en-dessous des entrées qui le permettent.

Utiliser les menus dans votre site

Pour afficher un menu dans votre site, il vous suffit d’inclure un petit squelette où vous le désirez :

#INCLURE{fond=inclure/menu, env, identifiant=<votre_menu>}

Vous pouvez aussi tester votre menu facilement en cliquant sur le bouton « Voir en ligne » ou en allant sur la page : spip.php?menu<numero>

Exporter les menus vers un autre site

Imaginons que sur une version de votre site en local vous réorganisez tous les menus. Pour reporter ces changements en prod, il faut exporter les menus dans un fichier et les réimporter en prod.

S’assurer tout d’abord que le plugin Yaml est activé .

Lorsqu’il est activé une icône apparaît : exporter ce menu

Le sauvegarder sur votre ordinateur

Sur le site de destination, il suffit de créer un nouveau menu avec le même identifiant (penser à le supprimer avant s’il existe). Et à la création, si le plugin YAML est bien activé, la boite de choix de fichier est proposée.

Surcharge des fichiers menus/<type>.html

Si pour des besoins particuliers, on doit surcharger un fichier du répertoire menus/, il ne faut pas oublier de copier le fichier XML de description qui va avec.

En effet, le plugin cherche le fichier XML au même endroit que le fichier HTML.

Discussion

354 discussions

  • 8

    Bonjour,
    j’ai installé la version 1.4.7 et sur mon site http://www.ipnl.in2p3.fr il y a des rubriques de niveau 3 qui ne s’affichent pas sans que je comprenne pourquoi. Par exemple les sous-rubriques du menu soutien technique. Quelqu’un aurait-il une explication ?
    Merci

    • Non, pour l’instant je ne vois pas du tout pourquoi. Encore ça ne marcherait nulle part pour telle niveau, ok, mais là ça marche dans certaines rubriques et pas dans d’autres…

    • Bonjour,J’ai installé SPIP 2.1.26 et le plugin Menus version 0.9.4 et suivi pas à pas la documentation http://www.harmoweb.cnrs.fr/spip.php?article232

      Le problème es le suivant : le menu de niveau 3 ne s’ouvre que pour la 1re rubrique de niveau 2, même si les autres ont des articles et sous-rubriques.

      Par exemple :
      -  Centre de ressources informatiques -> Service informatique : le 3 ème niveau s’ouvre
      -  Centre de ressources informatiques -> Cellule Développement et recherche" : pas d’ouverture du 3e niveau alors que cette rubrique contient des articles et des rubriques.

      Ce comportement est général : seul le 3e niveau s’affiche pour le 1er élément du niveau 2.

      Pourriez-vous m’aider, s’il vous plaît ? Je vous remercie d’avance. Cordialement

    • Bonjour,
      quand on ne limite pas le nombre de rubriques à afficher (3 dans mon cas) ça fonctionne correctement.

    • Bonjour,
      Je vous remercie pour votre réponse, ça marche à présent sans limitation. Je regrette quand même que ce bug n’ait pas été corrigé parce que c’est important de pouvoir limiter les niveaux pour des raisons de lisibilité. Je suis allée visiter votre site, il est vraiment bien.
      Bien cordialement,

    • Il y a peut-être une erreur dans l’algorithme qui teste « où ça en est » dans les niveaux, puisque ça marche pour le premier « passage ».

      Mais maintenant c’est devenu tellement n’importe quoi énorme, cette entrée de menu, avec ses 40000 options (il y en avait quelque chose comme 4 au départ…), que le code est vraiment bordélique :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/menus/trunk/menus/rubriques_completes.html

      Quand le code est propre et bien rangé, c’est « facile » de relire et de trouver un bug, mais là pour l’instant je n’ai pas encore le temps de me plonger dans ce bazar, désolé.

    • Oui, je comprends tout à fait.

      Le problème est que le CNRS fournit un kit SPIP aux laboratoires qui souhaitent s’intégrer dans le projet d’harmonisation des sites Web. Dans ce kit, le nombre de niveaux des menus est limité à 2, et lorsque ce n’est pas suffisant, c’est le plugin Menu qui est référencé dans la documentation, ainsi qu’un document expliquant la configuration du plugin.

      Et donc, si ce plugin ne fonctionne pas correctement à cause de ce bug, vous comprendrez aisément que c’est quand même un peu embêtant :O)

    • Bonjour,

      Une précision concernant le Kit labos CNRS (dont je suis chargé du développement) ; le plugin Menus est pris en charge comme alternative au menu proposé en standard (voir cette doc) ; dans le menu fourni en standard seuls les deux premiers niveaux sont affichés (un second menu situé à droite de l’espace utile permettant d’accéder aux sous-niveaux suivants) ; si le plugin Menus est utilisé, le Kit labos affichera bien tous les niveaux qu’il produira, mais comme ceux-ci s’ouvrent systématiquement vers la droite (volets de menus en CSS), il n’est pas raisonnable d’aller au-delà de 3 niveaux car on arrive sur le bord droit de l’écran, et l’ergonomie de ces ouvertures en cascade est plutôt limite (Cf. copie d’écran). Nous avons donc conseillé de limiter les niveaux pour des raisons ergonomiques, et non techniques.

      Les utilisateurs qui ont mis en place cette option ont ainsi limité à 2 ou 3 niveaux de rubriques, mais ont constaté que certains menus ne se développaient pas jusqu’aux niveaux indiqués (ce fil + fil sur notre forum “Harmoweb”) ; il semble donc qu’il y ait un bug lors de la production du code HTML, sur le test indiquant si la profondeur maximale autorisée est atteinte. Cela n’a à priori rien à voir avec le Kit labos qui se contente d’inclure ce qui est fourni par le plugin menus :
      [(#PLUGIN{menus}|oui) <INCLURE{fond=inclure/menu, env, identifiant=barrenav}>]

    • Ben j’ai donné le lien du fichier où se fait le HTML en question plus haut. Si quelqu’un arrive à s’y retrouver dans ce gloubiboulga… :(

      Par contre ça serait bien de déterminer si vous trouvez un motif qui déclenche le bug. De savoir quand ça ne se développe pas (« certains menus » oui mais lesquels, dans quels cas ? càd que d’autres se développent bien par contre ?).

    Répondre à ce message

  • 1

    Bonjour,

    Il faudrait indiquer dans la doc, mais aussi dans le texte explicatif de l’identifiant du menu qu’il n’est pas possible d’utiliser certains caractères tel que le tiret (du 6 pour les windowsiens).
    Car si on utilise un « - » dans l’identifiant, on a une belle erreur actuellement dans la version 1.5.3 du plugin.

    Répondre à ce message

  • 1

    Bonjour,

    J’ai quelques soucis avec les trads. Si je choisis une liste d’articles liée à une rubrique, cela ne marche pas. si je prends, un seul article, c’est bon, si je prends une rubrique avec ses articles / rubriques , pas bon mais dans ce cas il y a pas l’option trad dans la construction du menu.
    Donc dans Articles d’une rubrique, cela devrait marcher, mais j’ai beau eu vérifié mes liens de trads , rien à faire. Quand est ce que cela marche ?

    Répondre à ce message

  • 4
    ashledombos

    Bonjour :)

    J’ai un problème, je ne peux pas créer de menu (bouton « ajouter une entrée ») ni en modifier (boutons « crayons »), les dialogues ne s’affichent pas ; il y a une légère opacification du fond mais ça s’arrête là. Il y a également une petite boucle animée qui reste affichée : http://imgur.com/Y7azctM
    C’est également le cas pour la partie configuration du plugin ( http://i.imgur.com/2799LXx.png )

    Versions :

    *- Spip : 3.0.16
    *- Plugin menu est 1.5.4
    *- plugin saisies est 2.2.1
    *- PHP : 5.4.39
    *- Base : mysql Ver 15.1 Distrib 5.5.37-MariaDB
    *- nginx : 1.6.3

    À noter que je n’ai ce problème que sur le plugin menu, toutes les autres boîtes de dialogue du même genre de l’interface privée s’affichent sans problème...
    J’ai également testé en supprimant tous les plugins sauf menu et saisies.

    • Je ne reproduis aucun bug en 3.0, et Nico qui a fait la dernière modif (1.5.4) non plus, ça marche aussi.

      Sur quel navigateur as-tu le problème ? Tous ?

      Si le bloc se grise, c’est qu’il y a un chargement AJAX, et s’il reste comme ça, c’est que le truc AJAX ne se termine jamais ou avec une erreur. Il faut peut-être faire l’opération avec l’outil de dev d’ouvert, pour voir quelle est la réponse du serveur à la requête AJAX.

    • ashledombos

      Merci pour le tuyau @RastaPopoulos, ça m’a permis de trouver la solution !

      En effet, via la console j’ai peu avoir le retour d’erreur suivant :

      Load denied by X-Frame-Options : https://...org/ecrire/?exec=menus_editer does not permit framing.

      Du coup j’ai pu trouver que c’est à cause du fait que j’aie suivi la recommandation de cette page ci d’empêcher la mise en Frame

      Il est néanmoins possible d’autoriser les frames pour les pages de la même origine, dans mon cas, comme j’ai nginx, j’ai remplacé

      add_header X-Frame-Options DENY;

      par

      add_header X-Frame-Options SAMEORIGIN;

    • Et bien ashledombos, tu viens de m’enlever une épine du pied.

      Ça faisait quelques jours que je me penchais sur ce même souci.

      Merci.

      Par contre, pour moi, le changement de config d’nginx pour moi n’a rien changé au problème.

    • Bon, ben j’avais ça dans la conf globale d’nginx. Je l’ai viré et ça roule maintenant.

      Encore merci.

    Répondre à ce message

  • Rien de bien méchant mais si on édite le champs « Titre [Facultatif] » pour y mettre une balise <multi> cette dernière est bien prise en compte lors de l’enregistrment, mais se transforme en &lt;multi&gt; si on doit modifier cette entrée.

    Répondre à ce message

  • 2
    ashledombos

    Bonjour,

    petite question bête, existe-t-il un moyen d’inclure un code de langue dans le menu (de type <:bla_bla :> ?

    Je sais qu’il existe le plugin multi, mais dans certains cas, c’est plus pratique de gérer un fichier array php avec une équipe assez importante et disparate :)

    • Mmmh je ne crois pas, la fonction T_ou_typo() (qui est dans bonux et saisies) n’existait pas encore à l’époque. Ça marche pour tous les champs libres de Formidable, qui enregistre des configs de Saisies, mais dans Menus non. Il faudrait utiliser T_ou_typo() un peu partout lorsque ça prend un champ libre comme le titre personnalisable.

    • ashledombos

      Merci pour la réponse RastaPopoulos, je vais voir avec le plugin multi dans ce cas.

    Répondre à ce message

  • 2
    Didine

    Bonjour,

    je suis sur spipr et le plugin menus ne propose pas l’entrée « secteurs langue » est-ce normal ?

    Merci

    • T’es allée dans la config du plugin pour voir si c’était coché ? Par défaut à la première installation le plugin n’active pas tous les types d’entrées possible.

    • Didine

      Effectivement il était caché par défaut.

      Merci beaucoup pour l’info.

    Répondre à ce message

  • 4
    Pierre-Aurélien Georges

    Bonjour,

    comment faire en sorte, dans une « Liste ou arborescence de rubriques », d’afficher également les rubriques « vides » ? (qui chez moi ne sont pas réellement vides car elles contiennent un #TEXTE assez long pour remplir une page web + des sous-rubriques avec articles...)

    J’ai cherché un peu dans le code source du plugin mais ça m’a l’air bien compliqué à modifier... Serait-il possible de rajouter une option dans le formulaire de configuration du menu, dans l’espace privé ?

    Merci !

    • Ce n’est pas propre à ce plugin. SPIP considère que les rubriques sont avant tout des contenants, et s’il n’y a rien dedans, elles ne sont pas en statut publié. Le seul moyen de les voir est d’ajouter le critère {tout} dans les boucles (ou bien d’avoir des choses dedans bien sûr, fut-ce des documents joints).

      Donc soit faut avoir des choses dedans, soit faut surcharger le type d’entrée voulu (rubriques_completes.html) dans ton dossier squelettes/ en ajouter le critère aux boucles.

    • Pierre-Aurélien Georges

      Mon problème c’est qu’il n’y a pas de boucles RUBRIQUE dans les fichiers du plugin Menu... Je ne sais donc pas où rajouter ce critère tout.

      J’ai bien essayé de rajouter un critère tout sur la dans le fichier inclure/menu.html mais cela ne fonctionne pas...

    • Je t’ai indiqué le fichier juste au dessus hein…

    • Pierre-Aurélien Georges

      C’est bon, j’ai rajouté le crtière tout sur les 3 boucles RUBRIQUES du fichier menus/rubriques_completes.html et maintenant ça fonctionne nickel !

      (Désolé pour le bruit : j’avais pas compris que c’était le nom du fichier à modifier, je croyais que c’était juste un nom au pif, pour exemple).

      Merci encore

    Répondre à ce message

  • 1

    Salut, juste pour signaler un petit bug avec le plugin. Lorsqu’on édite une entrée du type « Article, rubrique ou autre objet SPIP », il est possible d’indiquer « Rubrique » et non « rubrique » sans que cela ne provoque d’erreur à l’enregistrement.

    Peut-être faudrait-il forcer le passage en minuscules pour le type d’objet lors de l’enregistrement, ou alors signaler une erreur ?

    • En fait tu peux mettre « PatATeS », « TiTi » ou « grOs_MiNETs », ou tout autre truc improbable, et ça valide toujours. Il n’y a aucune vérification que le type d’objet existe. Il n’y a que le caractère obligatoire qui est vérifié par le formulaire.

      On peut le rajouter dans le verifier() (mais c’est un cas particulier, n’importe quel type d’entrée pourrait avoir ses vérifs à faire). Ou bien il faut réussir à passer en déclaration de Saisies + Vérifier en YAML, pour avoir des formulaires de config plus complets (et pas juste des champs textes libres pour toutes les options !).

    Répondre à ce message

  • 1

    Bonjour,

    Est-ce possible d’ouvrir un menu lien externe dans un nouvel onglet ?

    Merci.

    • Tu peux avoir un petit script JS qui ouvre tous les liens avec la classe XXX dans un nouvel onglet (ça fait 2 lignes). Puis assigner cette classe aux entrées de ton choix.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom