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

  • 5

    bonjour c’est possible d’ajouter des « sections » dans le menu avec des titres non cliquables ?
    Par ex : un titre (non cliquable), quelques liens, un espacement un autre titre (non cliquable) des autres liens..

    Merci

    • Non, il n’y a rien qui permette de faire ça pour l’instant. À la limite tu peux utiliser les sous-menus (puisque ça sert à hiérarchiser les choses) en dessous d’une entrée de type « Lien arbitraire » dans laquelle tu mettrais un titre mais pas de lien (genre # à la place du lien).

    • ok dommage !!! est ce possible de récupérer le titre du menu ?
      Je mexplique. Je pourrais insérer genre 4 menus un sous l’autre et si je pourvais reprendre le titre du menu je pourrais le placer en tant que titre de séparation

    • Ben oui c’est #TITRE dans une boucle (MENUS), tout simplement.

    • bein voilà :) fallait juste y penser :) merci !!

    • Pour mettre un texte dans le menu sans qu’il est un lien dessus, j’ai utilisé la méthode suivante :
      Dans un menu, créer un lien arbitraire avec comme titre le texte voulu, et comme lien **
      Ensuite, il faut modifier le fichier du plugin menus/menus/lien.html (ligne 9) :

      <a href="#ENV{url}" title="[(#GET{titre}|attribut_html)]">#GET{titre}</a>

      en

      [(#ENV{url}|=={**}|?{[(#GET{titre})],<a href="[(#ENV{url})]" title="[(#GET{titre}|attribut_html)]">[(#GET{titre})]</a>})]

      C’est en fait un simple affichage conditionnel détectant ** dans la condition.

      J’ai une question moi du coup :
      comment mettre lien.html de coté (dans mes squelettes) pour ne pas perdre ma modif à la prochaine mise à jour du plugin. Ça marche avec les .html du dossier menus/inclure/, mais pas avec ceux dans menus/menus/

    Répondre à ce message

  • 2
    Matthieu Moy

    Bonjour,

    J’ai une installation de SPIP qui marche avec PostgreSQL. Quand j’essaye
    d’ajouter un menu, j’ai l’erreur :

    Warning : pg_query() [function.pg-query] : Query failed : ERROR : null value
    in column « identifiant » violates not-null constraint in
    .../spip/ecrire/req/pg.php on line 151

    En ajoutant un « echo $query ; » dans le code PHP, il semble que la requete
    fautive soit :

    INSERT INTO spip_menus DEFAULT VALUES RETURNING
    currval(’spip_menus_id_menu_seq’)

    Visiblement, le problème est qu’il manque une valeur par défaut pour le champ « identifiant » (si j’ajoute cette valeur par défaut à la main via pgadmin, le problème disparait).

    Malheureusement, la suite ne se passe pas mieux, j’enchaine erreur SQL sur erreur SQL. J’imagine que le plugin n’a pas été testé pour PostgreSQL (ou alors, c’est moi qui ai la poisse ;-) ). Si c’est le cas, ça serait bien de le mentionner dans les instructions d’installation (ou mieux, de porter le plugin, mais bon).

    • Pour la première erreur, j’ai commité une valeur par défaut (mais c’est juste pour ceux qui font une première installation, j’ai pas modifié les tables déjà existantes).

      Pour les autres erreurs, à ceux qui ont PG de faire des retours... Le plugin a effectivement été développé sur MySQL, et l’API de SPIP marche bien sur plusieurs type de base, mais là ce sont surtout des problèmes lors des déclarations.

      Personnellement je ne connais pas les différences entre MySQL et PG, donc je ne peux pas aider à la rechercher : juste en commitant les corrections.

    • Matthieu Moy

      Je n’utilise plus ce plugin (finalement, je fais tout en éditant les templates). Mais si ça t’intéresse, je peux tenter une ré-installation et te donner les messages d’erreur.

    Répondre à ce message

  • 1

    Merci pour ce plugin très utile.
    Comment faire pour trier par date inverse les articles suite à une entrée de mot-clé d’un menu ?
    Je suis allé dans
    menus/menus/mots.xml et
    menus/menus/mots.html mais mes connaissances sont insuffisantes pour programmer seul l’ajout d’un tri par date inverse.

    • Ah ben j’y suis arrivé tout seul finalement. Il m’a fallu écrire dans menus/mots.html

      [(#SET{tri_date,'date'})]
      ...
      <BOUCLE_articles_infini(ARTICLES){id_mot}{par #GET{tri_date}}{inverse}>

      J’ai mis une option supplémentaire dans mots.xml mais je ne m’en sers pas. Quelqu’un de confirmé pourrait peut-être en déduire une option supplémentaire à une entrée de menu avec articles d’un mot-clef.

    Répondre à ce message

  • 4

    Bonjour !! Et merci pour la contrib !
    J’ai une question concernant, l’affichage d’un secteur de langue, est-il également possible de lister les articles ? (avec les rub, et sous rubs)

    Merci ?

    • Si tu modifies le squelette de ce type d’entrée, oui. /plugins/menus/menus/secteurlangue.html et tu le surcharges dans tes trucs à toi.

    • Ah super merci beaucoup pour le support !
      Cet plugin est vraiment bien, bravo, il fonctionne trés bien et on a pas de surprises !

      Comme évolution un jour, il y aurait une possibilité de choisir différents modèles de menus ? Peut-être (déroulant ou autre) (trouvés à partir des templates de cssplay.co.uk éventuellement)

      Ou peut-être une fonction pour cacher certains menus par mots clés lorsque on choisis de lister par secteur par exemple.

      Juste des petites idées, mais le plug est déjà parfait comme ça !

      Merci !!

    • Comme évolution un jour, il y aurait une possibilité de choisir différents modèles de menus ?

      Le plugin menus construit les menus, le thème ou le squelette les mets en page. :)

      une fonction pour cacher certains menus par mots clés

      Comme pour le secteurlang, tu peux copier/coller le fichier /plugins/menus/menus/rubriques.html dans /squelettes/menus/rubriques.html et la faire ce que tu veut avec. Généraliser à toutes les possibilité est impossible, c’est pour ca que le répertoire squelettes existe sous SPip

    • « Le plugin menus construit les menus, le thème ou le squelette les mets en page. :) »

      Oui c’est vrai, que c’est toujours pratique d’avoir la main dessus. (plus clean).

      Oui, c’est vrai, j’avais pas pensé qu’on pouvait le mettre la pour y travailler dessus ;)

      Merci !

    Répondre à ce message

  • 3

    Bonjour à tous,

    Voici mon souci, lorsque je veux créer un menu via le plugin menu j’ai le message suivant :
    « Une erreur s’est produite pendant la mise à jour de la base de donnée. »

    Je travaille sous Mappstack(postgresql).

    J’ai fait un test sous MAMP, et cela fonctionne très bien.

    N’y-a-t’il pas un souci avec la table spip_menus dans postgresql ?
    Ou le lien vers la base est peut être mauvais.

    Merci d’avance !
    Pouine

    • Re-bonjour,
      Alors en fait j’ai trouvé, la base ne peut pas charger les données car les champs :

      id_menus_entree
      titre
      css

      dans la table spip_menus, ont pour format expression au lieu de valeur.

      C’est pourquoi la base ne veut pas d’entrée dans cette table.

    • Salut,

      Il y a peut de personnes qui utilise postgresql, si tu sais ce qu’il faut modifier, n’hesite pas à poster sur la liste de spip-zone .

      Ca pourrais être intéressant d’avoir des plugins compatibles postresql et mysql.

       :)

    • En fait, quand on regarde la table spip_menus, il y des valeurs du type ’’::text ou 0::bigint, ce sont les valeurs par défaut, il suffit de supprimer ça pour pouvoir charger directement un menu dans la base, par contre je n’ai pas réussi à remédier au souci de chargement via l’interface, j’ai toujours le même message.

      Par contre, une fois le menu créé, il est possible d’y ajouter les entrées via l’interface spip.

      Suis pas encore au point pour faire des plugins, mais comme je travaille sous postgresql, dès que je trouve comment remédier à certains problèmes, je posterai.

    Répondre à ce message

  • Oups un message doublon. désolé.

    Répondre à ce message

  • Je n’arrive pas à faire fonctionner ce plugin avec l’entrée « articles »

    cela donne le descriptif :
    Racine du site
    Sur 1 niveau(x)

    mais le menu n’affiche rien

    Par contre lorsque je sélectionne les secteurs 1 par 1 avec « Article, rubrique ou autre objet SPIP »
    ils s’affichent bien dans le menu.

    comment faire pour avoir un menu dynamique ?

    Répondre à ce message

  • 5

    Bonjour,

    Je suis un débutant de spip et j’aimerais personnaliser mes liens, mais je vois que je suis bloqué :

    Je me suis logé dans l’espace privé, puis dans configuration en suite j’ai cliqué sur l’option :
    html — article12.html.

    Mon véritable souci est comme remplacer dans mon code html par exemple :

    #TITRE (...) Lire la suite

    Empleos

    • Bonjour,

      Je suis un débutant de spip et j’aimerais personnaliser mes liens, mais je vois que je suis bloqué :

      Je me suis logé dans l’espace privé, puis dans configuration en suite j’ai cliqué sur l’option :
      html — article12.html.

      Mon véritable souci est comme remplacer dans mon code html par exemple :

      #URL_ARTICLE

      spip.php ?rubrique3

      Je vois que avec tout le code html vous ne pouvez pas me comprendre

    • Hello Webamies,

      Pour le code HTML que tu veux afficher dans tes messages mets le dans une balise <cadre> mon code html</cadre>. On pourra le voir !

    • Merci,
      voici

      #TITRE <a href="#URL_ARTICLE">(...) Lire la suite</a> 
      <a href="spip.php?rubrique3">Empleos</a>
    • Je n’arrive pas à voir le rapport avec le plugin Menus.

    • Je n’arrive pas à voir le rapport avec le plugin Menus.

      oui je sais, mais moi aussi je sais pas la ou je peux poser monp ote,
      si tu peux m’aider va y

    Répondre à ce message

  • 5
    Pierre, de Bruxelles

    Bonjour.
    J’ai installé le plugin avec succès.
    Mais comme il ne me convenait pas ( et que je connais rien à la gestion des squelettes, etc) je l’ai désactivé dans le module de gestion.

    Malgré cela, le menu apparait toujours, sous forme d’une simple ligne en haut des pages, avec un lien « Personnaliser ce menu » qui pointe vers une page web : « http://www.spip-contrib.net/Configurer-le-menu-principal-de »

    Au secours, comment supprimer cette horrible ligne sur mon site ?
    ( voir l’état actuel ici : http://sanurezo.org/spip )

    • Je ne vois aucune ligne bizarre sur le site actuel. Et dans tous les cas ça n’a aucun rapport avec ce plugin puisque justement vous l’avez désactivé. Donc il vaut mieux aller voir du côté de ZPIP.

    • Pierre, de Bruxelles

      En fait, je me rend compte que j’ai pas été assez précis :
      Cette fameuse ligne bizarre se retrouve dans les rubriques et les articles, mais pas dans la page d’accueil, effectivement.
      Merci de votre attention

    • Non, je ne l’ai pas plus sur les autres pages. Et dans tous les cas ça n’a toujours rien à voir avec le plugin Menus. C’est peut-être un message destiné uniquement aux webmasters de la part de ZPIP, pour indiquer qu’ils peuvent configurer un menu, mais qui ne met rien pour les vrais visiteurs.

    • Haqqtiviste

      bonjour

      la ligne apparait car le fichier appelé par ZPIP est inclure/barre-nav.html qui lui même contient :

      [(#SESSION{statut}|=={0minirezo}|oui)
      <ul class="menu-liste">
      	<li class="menu-entree"><a href="http://www.spip-contrib.net/?article3344" target="_blank"><:zpip:personaliser_nav:></a></li>
      </ul>]

      cette ligne apparaitra donc seulement si l’admin est connecté. donc personne ne la voit si ce n’est l’admin (0minirezo=oui)

      ensuite, comme indiqué dans le mode d’emploi de ZPIP, il suffit de changer le contenu de ce fichier en suestion pour y mettre par exemple :

      #INCLURE{fond=inclure/menu, env, identifiant=barrenav}

      et puis de créer un menu avec l’identifiant barrenav

      voilà

    • Même pas besoin de surcharger ce fichier puisque pour ce qui est du menu principal, il est déjà surchargé par le plugin Menus. Donc si ce dernier est activé, il faut juste créer un menu. En revanche il faut bien le surcharger si on désire faire son menu principal sans le plugin Menus, mais plutôt à la main dans un squelette.

    Répondre à ce message

  • 2

    Depuis quelques jours, sur un site 2.0.10 en local, j’ai ce message (non bloquant) qui apparait dans la zone de la barre de menu.

    Warning: strstr() expects parameter 1 to be string, array given in <chemin_du_site>/ecrire/inc/texte.php on line 408

    Si je re-clique sur l’item de menu correspondant à la page en cours, les messages disparaissent... jusqu’au prochain changement de page.

    Comment se débarrasser de ce soucis qui me semble lié au plugin menus (et surtout, le comprendre).

    J’ai installé la dernière version au cas où, sans succès.

    • J’ai finalement réussi à contourner le soucis, sans compréhension de son origine.

      Constatant que dans

      ecrire/inc/texte.php

      la ligne fautive semblait comparer un tableau à une chaine de caractère, j’ai voulu essayer de remplacer le tableau par un de ses éléments, soit :

      	if (!$t OR !strstr($t[identifiant], '<')) return $t;

      au lieu de

      	if (!$t OR !strstr($t, '<')) return $t;

      Cela supprime les warning, mais reste pour moi très insatisfaisant :
      Comme je ne comprends pas ce que je fais, je ne mesure pas les problèmes que cette modif pourrait soulever.
      Evidemment, les modifs seront écrasés à la moindre mise à jour
      Suis-je le seul à avoir besoin de cette modif ?
      Si oui, pourquoi ? si non serait-il judicieux de demander que cet ajoût (ou un équivalent plus approprié) soit generalisé ? Là encore, j’ignore qui s’occupe de ce genre de question.

      Merci de vos éclaircissements.

      Merci de vos lumière

    • Il faudrait surtout savoir le contenu de ce que c’est en train de tester, pour savoir d’où provient l’appel depuis apparemment le plugin Menus.

    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