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 les administrateurs du site n’ont pas directement la main dessus, que lorsqu’ils veulent y changer quelque chose, ils sont obligés d’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

Menus (0.9.5)
Menus (1.7.25)

Télécharger le paquet ZIP du plugin et placer son contenu dans votre répertoire “plugins/”. Activez-le ensuite dans la page de gestion des plugins.

Vous devez aussi avoir le plugin SPIP Bonux déjà installé.

Création d’un menu

Le plugin ajoute un lien dans le bandeau 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...

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

343 discussions

  • 1

    Bonjour,
    y a t’il un moyen de savoir si un lien du menu est actif (J’entends qu’il est lien de la page en cours); afin de pouvoir modifier son CSS et mettre cela en avant ?
    Merci pour le super boulot !

    • Je vois que Rastapopoulos a déjà répondu. Il y a, à priori, une classe “on active” déjà incluse (je sais pas comment je suis passé à coté). Mal recherché de ma part avant de poser la question. Désolé !

    Reply to this message

  • 5

    bonjour,
    sur ce plugin 1.7.28 en Spip 4.0, et sur la version précédente en 3.2, je me demande comment passer le paramètre de langue dans les liens, quelle est la syntaxe svp ?
    merci d’avance.

    • Bonjour,
      sur ce plugin 1.7.28 en Spip 4.0, gestion multilingue avec les balises #MENU_LANG
      cela marche impeccablement avec un type d’objet “article” avec “choisir la traduction”= “trad” : cela envoie vers la traduction de l’article dans la langue choisie.

      Mais j’ai créé un type d’objet “groupe_mots” mais là je n’ai pas un groupe de mots par langue, mais 1 seul groupe et la traduction est faite sur cet objet et sur les mots par les balises , autrement dit , pour avoir la liste des mots du groupe 2 , il faut envoyer le lien : “/groupe_mots2.html” en Fr et “/groupe_mots2.html?lang=en” en GB

      Alors, j’arrive bien à afficher dans ce menu la version anglaise du titre mais le lien reste toujours =“/groupe_mots2.html”
      (je modifie les squelettes dans une certaine mesure), alors comment dois-je faire si c’est possible SVP ? merci

    • Si une même page dépend de la langue *choisi par l’utilisateur*, il faut plutôt activer forcer_lang non ?
      https://programmer.spip.net/Forcer-la-langue-selon-le-visiteur

    • Bonjour RastaPopoulos,
      merci : j’ai mis et testé l’option :
      $GLOBALS[’forcer_lang’] = true;
      mais cela ne change rien .(voir le bouton “Pages par thèmes” de https://www.yanfouom.net (- peut être parce qu’en Nginx (?))
      Voici le paramétrage en Pj de ce bouton, c’est donc un menu de type ’objet’ .
      La langue choisie par l’utilisateur ne “suit” pas après le bouton du menu avec un objet ’groupe_mots’

      J’ai essayé sans succès de mettre dans les paramètres lang=#lang ou lang=lang pensant récupérer la langue de la page0

      En lisant l’histo du forum de ce plugin, j’ai été fouiller dans le code sans tout comprendre :
      j’ai donc lu le fichier menus/objet.html
      et je suggère, sans pouvoir le faire sans erreur, de mettre une boucle si on a un objet de type ’groupe_mots’ et l’option ’trad’ d’appeler le lien /groupe_mots’id’.html&lang=#ENVlang
      qu’en pensez-vous ?

    • mettre forcer_lang ne fera rien si tu n’utilises pas le vrai menu de langue, qui pose le cookie pour se souvenir du choix de la personne… que ce soit le form de SPIP (avec select par défaut) ou sa transformation en lien avec le plugin “menu langues liens”, ça doit passer par l’action “converser”, pas juste changer lang=xx dans l’URL, sinon ça ne sert à rien

    • Merci beaucoup RastaPopoulos, cela marche impeccable,
      tu es un Paganini de SPIP ! Cela faisait un bout de temps que je cherchais !

      pour les autres : j’ai mis dans le body.html dans une classe le code : #MENU_LANG, et ai mis dans config/mes_options.php la ligne :

      $GLOBALS['forcer_lang'] = true;

      Merci encore!

    Reply to this message

  • 11

    Bonjour,
    Sous spip 4.0 et menus 2.0.1 php7.4 et mariadb,
    Pour modifier, faire évoluer des menus déjà définis, la liste des propositions se réduit petit à petit. Elle passe de 10 entrées à 8 !
    J’avais sélectionné initialement l’entrée “acceuil” et “arborescence rubriques”.
    Hors en supprimant ces entrées pour définir une autre structure sous ce même identifiant de menu, je n’ai plus ces deux entrées en proposition !.
    Cette limitation se retrouve aussi dans la création d’un nouveau menu !
    Quel pourrait être le remède ? Ou se trouve dans le plugin cette démarche de sélection des entrées et le stockage de celle-ci est-il dans la table menu et sous quelle forme?
    Merci bien. Alain

    • T’es allé voir dans la config du plugin tout simplement ? Pour voir si ya pas des types d’entrées qui seraient masquées. Dans l’interface de Menus, on ne voit pas toutes les entrées (ça peut mais pas forcément), on voit toutes celles qui sont pas masquées par la config.

      Dans la config en revanche tu dois voir vraiment toutes les entrées existantes. Si pas présente même dans la config, alors là c’est que tu as un problème dans tes fichiers, soit qu’il en manque, soit un problème de droit de lecture dessus.

    • Merci bien pour la rapidité !
      Je viens d’enlever les 3 restrictions de présentation présélctionnées, texte libre, se déconnecter et secteur de langue.
      Dans le menu j’ai en place accueil et arbo rubriques.
      Dans le choix de nouvelle entrée, même pour un nouveau menu, elles n’y sont plus!.
      Ok pour le menu en cours, mais pour avoir une nouvelle combinaison pour un autre menu dans un autre lieu dans le site, c’est ’bloquant’.
      Merci bien Alain

    • Mais la question c’était dans la config, est-ce qu’elles y sont dans la liste celles que tu ne voient plus lors de la création ?

    • Elles n’y sont pas !

    • Et donc comme je le disais plus haut, si même là tu ne les as pas, c’est qu’elles ne sont pas trouvés *du tout*. Donc que tu as un problème d’installation, soit qu’il te manque des fichiers (menus/truc.html+xml pour chacun qui manque), soit de droits de lecture.

    • J’ai bien 15 fichiers en .html et 15 en .xml dans le répertoire :
      /plugins/auto/menus/v2.0.1/menus
      tous avec le même propriétaire le même groupe et -rwxrwxrwx
      A suivre

    • T’as pas des surcharges ? Là à ce niveau ensuite le seul moyen de savoir c’est de tracer dans le code, de mettre des var_dump() dans les fonctions PHP de listing des types d’entrées, etc.

    • En furetant dans /squelettes je trouve un dossier menus qui ne possède que deux html : accueil et rubriques_completes !
      Je n’ai pas souvenir d’avoir crée ce dossier.
      Leur entêtes sont explicite !:
      [(#REM)
      Copie du 2021-10-15 14:48:03 par alain
      Fichier original plugins/auto/menus/v2.0.1/menus/accueil.html
      ]
      et :
      [(#REM)
      Copie du 2021-10-16 10:47:34 par alain
      Fichier original plugins/auto/menus/v2.0.1/menus/rubriques_completes.html
      ]
      Après changement du nom de la rubrique dans /squelettes, j’ai 14 entrées dans le menu de configuration. Je trouve bien la même composition si je cherche à modifier les menus actifs.
      Ce dossier/squelettes /menus peut-il être crée lors de l’utilisation de la fonction d’attachement à articles ou rubriques ?
      Ça avance.

    • T’aurais pas essayé de modifier ces fichiers avec Skeleditor plutôt ? L’entête parait générée automatiquement par un logiciel, pas un humain, avec le même format partout.

    • C’est possible sauf qu’avec Skeleditor la zone hors squelettes n’est pas accessible !
      Il me semble que j’aurai plus tôt récupéré à la main la totalité du dossier d’origine.

    • Bonjour cher Rastapoulos,
      Tu as raison en pensant à l’utilisation de SKELEDITOR. En effet j’ai accès aux données des plugins lorsque je lance Squelettes&CSS depuis le site. Skeleditor est très clair car il avertis par le message :
      Ce fichier sera copié vers squelettes/menus/page_speciale.html lors de l’enregistrement
      Donc l’erreur était bien de mon fait.
      Merci pour l’accompagnement rapide et pertinent.

    Reply to this message

  • 2

    Bonjour,
    L’import de menus à partir de fichier yaml ne semble plus fonctionner, l’export est ok.
    Apache 2.4
    PHP 7.4.9
    toutes versions à jour
    SPIP 3.2.11
    Sarka-SPIP 3.4.10
    Menus 1.7.28
    Saisies pour formulaires 3.54.7
    YAML 2.0.18
    Le fichier importé (UTF8 / unix), a juste été exporté et réutilisé tel quel sans modif.
    Dans les log spip & yaml -> ERREUR: Erreur d’analyse YAML : Unable to parse line 1 (-)

    Cordialement

    TG

    • C’est le plugin YAML qui plante en utilisant la librairie par défaut (sfYaml : symphony v1).
      En changeant la constante : define(’_LIB_YAML’, ’spyc’); dans mes_options, cela fonctionne à nouveau correctement.
      Les autres librairies (symfony (v4), libyaml) plantent aussi !

      Cordialement

      TG

    • Je n’ai pas constaté de pb en PHP 7.4 avec yaml pourtant (utilisé aussi dans saisies, formidable, noizetier). Il faudrait donc plutôt décrire le problème dans le plugin YAML, et dans les tickets en priorité https://git.spip.net/spip-contrib-extensions/yaml

    Reply to this message

  • 4

    Bonjour,
    existe-t-il une page décrivant l’utilisation de
    Surcharge des fichiers menus/<type>.html ?
    Je cherche à remplacer les styles menu-entree item menu-items__item par des classes de Bootstrap pour certains menus.
    Merci

    • Décrire quoi ? C’est un squelette, tu le surcharges comme n’importe quel autre squelette.

      Mais la surcharge doit toujours être le tout dernier recourt, puisqu’alors tu perds absolument toute mise à jour, correction de bugs etc ensuite.

      Il faut plutôt utiliser les extend et mixin SCSS de Bootstrap pour appliquer les styles prédéfinis que tu veux à une autre classe.

    • Décrire quoi ? C’est un squelette, tu le surcharges comme n’importe quel autre squelette.

      Eh bien décrire la syntaxe du xml par exemple. Le <rang> du xml, c’est le rang de quoi ?

      Mais la surcharge doit toujours être le tout dernier recourt, puisqu’alors tu perds absolument toute mise à jour, correction de bugs etc ensuite

      OK mais j’ai vu qu’on pouvait en créer de nouveaux dans le /menus de mon plugin, donc je peux créer les miens dérivés avec mes classes ?

      Il faut plutôt utiliser les extend et mixin SCSS de Bootstrap pour appliquer les styles prédéfinis que tu veux à une autre classe.

      Je ne connais pas cette subtilité. Est-ce que cette méthode répondrait à remplacer les classes de
      <li class="menu-entree item menu-items__item par les classes
      <li class="nav-item ... ?

      Merci

    • Et où/comment se définit la variable #VAL{_MENUS_EXTRA_CLASS} ?

    • Ah ben elle est là la doc...
      Ajouter des types d’entrées pour les menus

      Et j’ai trouvé la balise du xml <refuser_sous_menu /> qui me manquait...

    Reply to this message

  • 2

    Bonsoir,

    il me semblait qu’il était possible d’avoir un menu multilingue pour un site par secteur de langue, donc basculant, par exemple, entre un article et sa traduction.

    Si c’est bien le cas, je ne retrouve plus comment.

    Une idée.

    Merci d’avance,

    Cordialement,

    Hervé

    Reply to this message

  • Bonjour à tous,

    J’ai eu une difficulté pour installer le plugin MENUS sur un spip 3.2.11. Les tables SQL n’étaient pas créées et j’avais le diagnostic ; “table menus doesn’t exist”.

    Sur un site en local, j’avais pu recréer le problème. Le fait de désactiver alors tous les plugins et de les réactiver avait permis de créer les tables menus, mais cela n’a pas marché sur le site à distance.

    En m’inspirant de certaines discussions, je suis allé voir les tables de spip_meta : elles contenaient deux lignes : une appelée “menus” et l’autre “menus_base_version” (contenant 0,5,6) qui m’ont paru suspectes puisque j’avais complètement. desinstallé le plugin MENUS.

    En supprimant ces deux lignes dans la base, j’ai pu réinstaller le plugin et les tables ont bien été créées !

    Reply to this message

  • Bonjour, j’utilise avec plaisir ce plugin depuis un moment.
    Actuellement je l’utilise pour un site multilingue avec l’entrée secteur de langue. Tout fonctionne sans problème.
    Par contre je souhaite qu’une des rubriques ne s’affiche pas dans la barre de navigation or avec l’entrée secteur langue il n’est pas possible d’exclure des rubriques comme dans l’entrée “liste ou arborescence” du plugin.

    Comment contourner ce problème ?

    Merci d’avance pour votre aide !

    Reply to this message

  • 4

    Bonjour

    J’utilise ce plugin depuis très longtemps sans problème. Je viens de lui découvrir une bizarrerie sur certains de mes sites.

    Il ne me propose ni “Article, rubrique ou autre objet SPIP”, ni “Lien arbitraire”.

    C’est une installation mutualisée (donc même version du plugin 1.7.26 sur tous mes sites). Certains sites me proposent bien ces items, et d’autres non. Je dois avoir des plugins incompatibles, mais je ne vois pas par quel mécanisme un conflit entre plugin pourrait supprimer des entrées.

    Auriez-vous des pistes pour que j’investigue ?

    • La toute première piste est toujours la même : désactiver tous les plugins non nécessaires à ce qu’on veut tester, ne laisser que l’obligatoire. Pour déjà voir si ça vient pas d’un autre plugin, et donc réactiver ensuite un par un si c’est le cas.

    • Oui, bien sûr. j’aurais dû y penser avant de poster.

      J’avais en effet un plugin qui avait un répertoire menus/ avec dedans lien.html  objet.html  page_speciale.html.

      Moyennant de renommer ce répertoire en menus-old/, tout est revenu dans l’ordre. C’est un vieux plugin (en développement local) qui avait dû implémenter ces items du temps où ils n’existaient pas dans “Menus”.

    • Ils ont toujours existé, vu que ce sont justement les tous premiers types de base lors de la création du plugin. :)

      Tu as dû vouloir les surcharger sûrement

    • Dans la config du plugin, il est possible de masquer des types d’entrées (ex: deconnexion que j’ai cherché un bon moment).
      Peut-être sont-elles masquées.

    Reply to this message

  • 1

    Bonjour,
    J’utilise SPIP 3.2.3 avec le plugin MENUS 1.7.19
    Dans le modèle menus/ articles_rubrique.html, je souhaite utiliser la balise #EXPOSE.
    Malheureusement cette balise n’affiche rien car la variable d’environnement de l’article courant n’est pas connu par ce modèle (#ENVid_article n’affiche rien quand je suis sur un article).
    #ENVid_article affiche bien le n° de l’article jusqu’à l’inclusion de inclure/menu.html mais la balise #MENUS_AFFICHER_ENTREE n’a pas l’air de gérer les variables d’environnement.
    Avez vous remarqué ce problème ?
    Et trouvé une solution ?

    Cordialement
    Daniel

    • Tu vois pourtant que ça expose déjà bien des choses, et il y a un filtre dédié à Menus pour ça, c’est dans le code même du morceau dont tu parles (|menus_exposer), il suffit de réutiliser pareil.

    Reply to this message

Add a comment

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 / PostgreSQL
  • 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 apparait.

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.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom