Menu hierarchique, rubriques/articles classés

créer des menus hiérarchisés sans limite de profondeur, en entrelaçant les rubriques et les articles dans les sous-menus, et en les classant selon l’ordre que l’on a défini.

l’intérêt principal, en dehors de l’absence de limite de profondeur, est de ne pas se limiter à lister d’abord les rubriques et ensuite les articles dans les sous-menus, mais de les sortir entrelacées, dans l’ordre que l’on aura choisi.


exemple

le site se compose de

  • rubrique fruits
    • article poires
    • article pommes
  • rubrique légumes
    • article poireaux
    • rubrique pomme de terre
      • article bintje
      • article belle de fontenay
    • article chou-fleur
    • article navet
    • article tomates
    • article poivrons
    • article concombre

ce menu permet de placer la rubrique pomme de terre entre les articles poireaux et chou-fleur : on ne mélange pas les légumes d’hiver avec ceux d’été...

voir ici un exemple en ligne sur un spip 1.7.2 non modifié en ayant juste uploadé tous les fichiers.


contenu

menu.html/menu.php3 : squelette du menu à appeler dans les pages.

menu.css/menu.js : feuille de style et javascript pour l’affichage du menu.

plus.gif/moins.gif : images « + » et « - » pour développer et condenser les sous menus.

mes_fonctions.php3 : deux filtres, pour jouer avec les numéros d’ordre dans les titres des articles et des rubriques.

article.html/article.php3 : squelette d’article rudimentaire contenant l’appel du menu.

rubrique.html/rubrique.php3 : squelette de rubrique rudimentaire contenant l’appel du menu.

sommaire.html/sommaire.php3 : squelette de sommaire rudimentaire contenant l’appel du menu, en dehors d’un contexte d’article ou de rubrique.


mise en oeuvre

-  numérotez les titres des articles et des rubriques pour les classer avec un numéro de la forme « nn. » (numéro d’ordre point espace) ; pour l’exemple ci-dessus, on aurait : « 1. fruits » « 1. poires » « 2. pommes » « 2. légumes » « 1. poireaux » « 2. pommes de terre » « 3. navets » ...

-  filtrez vos appels de titre par (#TITRE ;

-  copier les deux filtres de mes_fonctions.php3 dans le vôtre ;

-  placer les fichiers menu.html, menu.php3, menu.js, menu.css, plus.gif et moins.gif à la racine de votre spip ;

-  copier l’appel du menu :

<INCLURE(menu.php3){id_rubrique}{id_article}>

à l’endroit opportun dans les fichiers où vous en avez besoin ;

-  jouez avec menu.css pour adapter le menu à votre mise en page ;


précautions d’emploi

-  si vous n’utilisez pas article.html/article.php3 et rubrique.html/rubrique.php3 comme squelette d’affichage des articles et des rubriques, il faut modifier menu.html : ligne 29 colone 111 pour rubrique et ligne 41 colone 118 pour article.

-  si les titres des articles et des rubriques ne contiennent pas de numéro, elle seront classées par ordre alphabétique.

Discussion

31 discussions

  • 1

    Bonjour,
    J’utilise le menu depuis le début sans problème. Je viens de passer un de mes sites sous v1-8b2 et là je rencontre le problème suivant. Dans le menu rubrique, la rubrique s’ouvre normalement. Par contre, dans l’environnement article, le secteur s’ouvre mais pas la rubrique parente. Dans le même squelette sous v1-7-2, le menu marche normalement. Une idée ?
    Merci d’avance.

    • Je me réponds à moi-même. La version 1-8 nécessite une grande rigueur dans l’application des critères de boucle. Dans la boucle ouvre_article du fichier menu.html il existe une BOUCLE (HIERARCHIE) sans critère. Il suffit de rajouter id_article et le menu fonctionne.
      YR

    Répondre à ce message

  • 3

    est-ce qu’il a été essayé avec la 1.8b1... parce que je fais des essais, mais voilà l’erreur que j’obtiens :

    Parse error : parse error, unexpected T_STRING, expecting ’)’ in c :\documents and settings\jl-grellier\mes documents\mes sites\region2004_spip1_8\inc-public.php3(8) : eval()’d code on line 74

    Quelqu’un peut-il m’aider ???

    Merci

    A+

    • C’est de mieux en mieux, j’ai le même message sur une 1.7.2... sur easyphp en local ???

      des idées ??

      Merci

      A+

    • voici le message que j’obtiens sur une version 1.7.2, que ce soit en local ou en mode distant.

      Parse error : parse error, unexpected T_STRING, expecting ’)’ in /var/premium/www/data/B/8/E/7/B8E7A43K/site/CACHE/d/men-id-id_article%3D.891e43.NEW on line 38

      Les fichiers ont été installés conformément à la documentation qui définit la mise en oeuvre.
      Quelqu’un a-t-il rencontré / résolu ce problème ?

      Merci de votre aide.

    • meme pb ..............

    Répondre à ce message

  • Bonjour,
    Lorsque j’essaye de faire marcher le menu j’obtiens invariablement ce message. la partie de droite (contenu) apparait néanmoins....

    Parse error : parse error, unexpected T_STRING, expecting ’)’ in c :\program files\easyphp1-7\www\ghostlab\CACHE\d\men-id-id_article%3D.891e43.NEW on line 57

    d’ou cela peut il venir ?

    merci
    manu

    Répondre à ce message

  • 2
    Maitre.sinh

    deux problemes non resolus :

    sous Ie une partie du menu « disparait »

    exemple ici : www.plastocratie-70.tk/sommaire.php3

    Le second probleme est celui du critere lang : pas moyen de filtrer correctement les articles. Si je passe en ESpagnol dans l’url, l’article ES n’est pas selectionné au profit du FR...

    quelqu’un a une idée ?

    sinon, beau travail !

    • johnniefox

      Si par disparaitre tu entends la rubrique d’appartenance de l’article se replie, alors, j’ai constaté la même chose, à priori en 1.8 et sous IE et Netscape. Car en fait c’est, semble t il la partie javascript générée par les deux boucles spip de menu.html, qui n’est pas la même en 1.8 qu’en 1.7. Le change(rubrique_id) de la rubrique de l’article n’est pas généré ...
      je sais, je ne résouds rien, mais ce sont les constatations que j’ai faites jusqu’alors ...
      à suivre ...
      JFox

    • Bon ! ben y semblerait que j’ai une solution : j’espère que c’est dans « les règles de l’art »

      script type=« Text/JavaScript »

      B_menu_voir_article

      BOUCLE_menu_voir_article(HIERARCHIE)

      change(’#ID_RUBRIQUE’) ;

      /BOUCLE_menu_voir_article

      change(’#ID_RUBRIQUE’) ;

      /B_menu_voir_article

      //B_menu_voir_article
      document.getElementById(’art#ID_ARTICLE’).style.color=« #fcb103 » ;

      /script

      a+
      JFox

    Répondre à ce message

  • 3

    Superbe, les autres menus en arborescences rencontraient tjs quelques problèmes pour les sous-sous-sous rubriques. Avec celui là aucun problème !

    Par contre j’aimerais savoir s’il est possible de déplier automatiquement une branche, dès l’affichage du menu.

    Merci de la réponse, je ne suis certainement pas le seul à être dans ce cas !

    • bonjour a tous, ce menu a l’air excellent !
      ce que moi j’aimerais savoir, c’est s’il est possible de déplier une branche au survol de la souris et non en cliquant sur l’icone ?
      merci d’avance pour vos pistes !

    • pour une fois que j’ai de l’avance: :

      fichier menu.html

      ligne 28 : change « onclick » par « onmouseover »

      et le menu s’ouvre au survol...

      par contre, pour l’ouvrir de le chargement...« onload » mais alors, la il n’est plus reactif.

      Quand a moi, j’essaie de desativer le click sur les rubriques...au secours !

      merci

    Répondre à ce message

  • 1

    Bonjours à tous.
    Dans mon menu de navigation ma bordure pose problème ... je ne sais plus quoi faire ...

    Article avec problème

    Article sans problème

    Voici mon code article.html

    <!-- Menu de navigation rubriques -->
      
     <div class="menu2"> 
        	 <div class="menu-titre"> [<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>Accueil</b></a>] 
        	 </div>
            <INCLURE(menu.php3){id_rubrique}{id_article}><p>
      </div>

    Et habillage.css

    .menu2 {
    	border: 1px solid #a0a0a0;
    	border-top: 0px;
    	padding: 0px;
    	margin: 0px;
    	margin-bottom: 16px;
    
    }

    Merci !

    • Ce problème ce pose uniquement sur la dernière rubrique

    Répondre à ce message

  • Bonjour, j’y suis presque, il me manque juste une explication : Que signifie cet extrait du fichier « Lisez moi » :

    mise en oeuvre

    numérotez les titres des articles et des rubriques pour les classer avec un
    numéro de la forme « nn. » (numéro d’ordre point espace) ;

    filtrez vos appels de titre par (#TITRE ;

    Là je dois dire, ça m’échappe : Que dois-je faire exactement ? Reprendre chaque article pour le renommer ??? Je dois mal comprendre... Help ?

    Merci, pX (www.halluci.net)

    Répondre à ce message

  • 1

    ... dans un premier temps, je voudrais que ce menu hiérarchique ne présente que ce qu’il y a sous une seule rubrique, et pas l’ensemble du site : comment faire ?

    Et puis je n’ai pas compris comment on pourrait ouvrir au démarrage les diffénrets niveaux d’arborescence sans présenter les articles, juste les rubriques.

    Merci pour vos aides judicieuses et généreuses.

    Sinon, c’est un super travail.

    Amicalement

    François

    • Jusqu’à que le nombre de sous-rubrique dépassent la 20aine (après le menu semble afficher une page blanche :s ) je faisais ainsi pour afficher une seule rubrique et, de surcroit, l’ouvrir :

      j’ai remplacé, au début du script, dans menu.html :

      <?php
      $i=0;
      <BOUCLE_menu(RUBRIQUES) {racine} {par titre}>
      
      par : 
      
      <?php
      $i=0;
      <BOUCLE_menu(RUBRIQUES) {id_rubrique=1} {par titre}>
      
      (pour afficher uniquement la rubrique dont l'identifiant était 1;
      
      pour l'ouvrir, remplacement de la ligne : 
      
      <BOUCLE_menu_ouvre_rubrique(RUBRIQUES){id_rubrique}>
      
      par : 
      
      <BOUCLE_menu_ouvre_rubrique(RUBRIQUES){id_rubrique=1}>
      
      Et normalement la rubrique 1 est ouverte d'office en affichant juste les sous-rubriques. Voilà
      
      
      

    Répondre à ce message

  • J’ai un problème avec ce menu : rien ne s’affiche, depuis que le nbr de sous-rubriques a largement augmenté (avec 10 ss-rubriques : pas de problemes, avec 25-30 : le menu m’affiche une page blanche).

    Quelqu’un a une idée pour palier à ce problème ?

    Répondre à ce message

  • J’ai posé la question sur la liste des dev de spip et voici ce qui m’a été répondu :

    Ce squelette prend un champ SQL contenant des guillemets et le met dans une chaine PHP entre guillemets ; c’est à l’auteur du squelette de se protéger de cette situation en rajoutant un filtre.

    j’ai alors demandé une petite explication supplémentaire et voici ce qu’il m’a dit :

    remplacer les " par des ’ et rajouter le filtre addslashes .

    si ça peut rendre service... moi en tout cas j’ai toujours pas pigé...

    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