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

346 discussions

  • 2

    Est-il possible d’ajouter le critère de tri “par rang” pour les entrées type articles / liste d’articles ?

    Ou alors il faut modifier les fichiers du plugin (mais j’ai lu que ce n’était pas à privilégier).

    Merci

    • par “num titre” ?

    • J’ai essayé mais cela ne semblait pas pris en compte jusqu’à ce que je trouve et coche dans la config du plugin “Rang” le paramètre “Entrées de menu du site”.
      et ensuite “rang” comme paramètre dans la config de menu fait ce qu’il faut !

      Excellent donc.
      Merci

    Reply to this message

  • 3
    Frédéric

    Bonjour,

    Je suis sous spip 4.01
    PHP 7.4.25
    J’ai utilisé le pluging avec le menus animé déroulant sur un premier site, et tout a bien marché,

    _

    Je tente pour un autre site sur un hébergeur que je ne connais pas : o2switch, et là impossible de le faire apparaitre.

    Je veux un menu qui m’affiche toutes mes rubrique et mes sous rubrique au survol.

    J’ai cliqué sur ajouter une entrée=> Liste ou arborescence de rubriques et d’articles
    (j’ai bien nommé mon menu et le css)

    Quand je veux enregistrer ma consctruction du menu, j’ai systématiquement : Oups. Une erreur inattendue a empêché de soumettre le formulaire. Vous pouvez essayer à nouveau.

    Puis quand j’essaie à nouveau une page : menu_edit : Accès interdit.

    Quand je clique sur le lien “voir en ligne” sous le numéro du menu, j’ai bien écrit “menu”, mais c’est vide....

    Quel est la cause ? Je suis webmester du site, j’ai donné tout les privilèges d’utilisateurs quand j’ai créé ma base de donnée.

    Merci de votre aide car sans menu...difficile d’avancer,

    • ça a été corrigé à priori mais il n’y avait pas de tag pour générer une nouvelle version, si c’est pas SVP que tu installes les plugins

      là je l’ai rajouté, donc dans quelques heures il devrait y avoir un nouveau ZIP 2.0.2

    • Frédéric

      J’ai testé ce matin, j’avais bien la notification de mise à jour dans mon spip et ça marche, merci pour la correction ! Ceci n’est donc pas un problème lié a mon hébergeur ? Une personne sur le forum Discuter m’a indiqué avoir ce problème récurrent avec l’hébergeur o2switch.

    • Super, merci Rastapopoulos !
      Je passais par là pour la même raison.
      Ça, plus ta note d’humour sur une vidéo que je regardais il y a une heure (https://contrib.spip.net/Mon-premier-formulaire-pas-a-pas-c-est-Formidable à 6mn 10), clairement tu as fais ma journée !
      Merci encore.

    Reply to this message

  • 2

    Bonjour, je double poste, car je ne sais pas de quel coté ça vient.
    J’utilise “Traduction entre rubriques 3.1.4” et “Menus 1.7.28”. Si j’utilise le critère “trad” à la question Choisir la traduction en fonction du contexte (mettre “trad” pour cela) [Facultatif]
    ça marche bien pour un article, mais pas pour une rubrique.
    Je suppose que peut être “Menu” ne le prévoyait pas à l’origine. Bref, y a t’il un moyen de résoudre cela ?
    Merci à vous pour tout le boulot de dingue !

    • Tu ne précises pas de quelle entrée tu parles.

      Car dans celle pour tout contenu (objet.html) le plugin tradrub est bien pris en compte :
      https://git.spip.net/spip-contrib-extensions/menus/src/branch/master/menus/objet.html#L12

    • Merci pour ta réponse. Je suis bien en objet. J’ai trouvé l’origine du souci ! Je pensais à un conflit de plugins, mais non, c’est pas ça.

      Si dans le menu je met la rubrique cible française avec le contexte “trad”, ça ne fonctionne pas.
      Il faut la rubrique d’origine en anglais avec le contexte “trad” pour que ça passe.

      Bref, je pense qu’il faut mettre la rubrique originale en cible du menu.

      Merci beaucoup de ta réponse, ça m’a permis de me remettre dessus en sachant que ça ne venait pas du plugin.

    Reply to this message

  • 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

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