SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Navigation > Menus contextuels

Menu hierarchique, rubriques/articles classés

dimanche 5 septembre 2004, par m.. Dernier ajout mercredi 6 décembre 2006


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|denum)] ;

- 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.

Documents joints


Répondre à cet article

  • Menu hierarchique, rubriques/articles classés

    2 avril 2007 20:43, par Jmarco

    Bonjour à tous,

    ce menu est une vraie petite merveille, je suis sous spip1.9.2a et je voudrais masquer un article, mais en dépit de mes efforts je n’arrive a rien,

    donc soit avec un mot clef : {titre_mot=Cacher}

    ou soit avec une restriction au niveau du titre, la 1ere lettre :

    {titre!==^[xX]} rien n’y fait, (l’article s’appelle Xcalendrier dans la rubrique "AGENDA" ) merci, a+ Jmarco

    Voir en ligne : rubrique : AGENDA

    Répondre à ce message

    Retour au début des forums

  • ce menu ne fonctionne plus avec spip 1.9

    18 août 2006 01:42, par stephane09

    pas d’affichage des sous rubriques et leur contenu.

    Dommage :-(

    Répondre à ce message

    • ce menu ne fonctionne plus avec spip 1.9 31 janvier 2007 21:31, par jmarc dufour

      Bonsoir a tous , pour moi ausi ce menu ne fonctionnait plus dans spip 1.9.1, donc je viens de trouver une soluce en local,(je n’ai pas encore fait la mise a jour en ligne, qqs petits détails de liens a regler...), en fait c’est dans le fichier menu.html qu’il faut rajouter une ligne :

      en fait, j’ai fait un simple copier-coller, de l’expression superieure, je ne suis pas du tout un crac de php & Cie, mais c’est plutot en bricolant... Donc testez et dites moi si chez vous c’est bon.

      + jmarco

      Voir en ligne : http://www.le-clapotis.net

      Répondre à ce message

      • ce menu ne fonctionne plus avec spip 1.9 14 février 2007 17:49, par Angelinaemi

        Salut, je suis avec spip 1.9 et je n’arrive pas a faire fonctionner le menu meme avec ta phrase de code magique (je suis en local) Pourrais tu m’envoyer ton squellette stp ?

        Répondre à ce message

        • ce menu ne fonctionne plus avec spip 1.9 20 février 2007 08:18, par jmarc dufour

          Bonjour, je le poste ici , je n’ai pas ton mail :

          <script type="text/javascript" language="javascript" src="[(#CHEMIN{menu.js})]"></script>

          <?php

          $i=0;

          <BOUCLE_menu(RUBRIQUES) {racine} {par titre} {inverse}>

                  <BOUCLE_menu_n(RUBRIQUES) {id_rubrique} {par titre}>

                          $menu[$i]["[(#TITRE|kenum)] - #ID_RUBRIQUE"]=array("parent"=>"#ID_PARENT","titre"=>"[(#TITRE|denum)]","idrub"=>"#ID_RUBRIQUE","idart"=>"");

                          $i++;

                          <BOUCLE_menu_a(ARTICLES) {id_rubrique} {par titre}>

                                  $menu[$i]["[(#TITRE|kenum)] - #ID_ARTICLE"]=array("parent"=>"#ID_RUBRIQUE","titre"=>"[(#TITRE|denum)]","idrub"=>"","idart"=>"#ID_ARTICLE");

                          </BOUCLE_menu_a>

                          <BOUCLE_menu_r(RUBRIQUES) {id_parent} {par titre}>

                          $menu[$i]["[(#TITRE|kenum)] - #ID_ARTICLE"]=array("parent"=>"#ID_RUBRIQUE","titre"=>"[(#TITRE|denum)]","idrub"=>"","idart"=>"#ID_ARTICLE");

                          <BOUCLE_sous_menu(boucle_menu_n)></BOUCLE_sous_menu>

                          </BOUCLE_menu_r>

                          $i--;

                  </BOUCLE_menu_n>

          </BOUCLE_menu>



          function ecrire_menu ($i,$parent) {

                  global $menu;

                  ksort($menu[$i],SORT_NUMERIC);

                  foreach($menu[$i] as $menu_o ) {

                          $largeur=201-(($i-1)*16);

                          if ($menu_o["parent"]==$parent) {

                                  if ($menu_o["idrub"]!="") {

                                          echo "

                                                  <div class=\"lienr\">

                                                          <div class=\"plusmoins\" id=\"plusmoins".$menu_o["idrub"]."\"  onclick=\"change(".$menu_o["idrub"].");\" > </div>

                                                          <a id=\"tete_rub".$menu_o["idrub"]."\" class=\"alien\" href=\"#URL_PAGE{rubrique,id_rubrique}=".$menu_o["idrub"]." \">".$menu_o["titre"]."</a>

                                                  </div>

                                                  <div id=\"rub".$menu_o["idrub"]."\" class=\"niv\" >

                                          ";

                                          $prochain_parent=$menu_o["idrub"];

                                          $k=1+$i;

                                          ecrire_menu ($k,$prochain_parent);

                                          echo "

                                                  </div>

                                          ";

                                  } else {

                                          echo "

                                                  <div class=\"lien\"><a id=\"art".$menu_o["idart"]."\" class=\"alien\" href=\"#URL_PAGE{article,id_article}=".$menu_o["idart"]."\"><img src='squelettes/sculpteurs3/file.gif' width='16' height='16' border='0' alt='file'>".$menu_o["titre"]."</a></div>

                                          ";

                                  }

                          }

                  }

          }

          ecrire_menu(0,0);



          ?>



          <B_menu_ouvre_article>

          <BOUCLE_menu_ouvre_article(ARTICLES){id_article}>

                  <script type="Text/JavaScript">

                  <BOUCLE_menu_voir_article(HIERARCHIE){id_article}>

                          change('#ID_RUBRIQUE');

                  </BOUCLE_menu_voir_article>

                  document.getElementById('art#ID_ARTICLE');

                  </script>

          </BOUCLE_menu_ouvre_article>

          </B_menu_ouvre_article>



                  <BOUCLE_menu_ouvre_rubrique(RUBRIQUES){id_rubrique}>

                          <script type="Text/JavaScript">

                          <BOUCLE_menu_voir_rubrique(HIERARCHIE)>

                                  change('#ID_RUBRIQUE');

                          </BOUCLE_menu_voir_rubrique>

                          change('#ID_RUBRIQUE');

                          document.getElementById('tete_rub#ID_RUBRIQUE');

                          </script>

                  </BOUCLE_menu_ouvre_rubrique>

          <//B_menu_ouvre_article>

          a+ jmarco

          Répondre à ce message

    Retour au début des forums

  • Menu hierarchique, rubriques/articles classés

    20 février 2007 16:18, par scoubidoo.bidoo

    Bonjour

    Suite à des modifications sur le fichiers nous l’avons fait fonctionner avec une version 1.9.1 une petite modification des CSS, ains que la suppression des fichiers .php3 et un include directement dans le squelette MGS

    j’aurais bien voulu joindre le .zip mais je ne peux pas uploader içi :’(

    scoubidoo

    Voir en ligne : Pour voir le menu : http://scoubidoo.bidoo.free.fr

    Répondre à ce message

    Retour au début des forums

  • Menu hierarchique, rubriques/articles classés

    14 février 2007 17:02, par Angelinaemi

    Bonjour, ce menu me plaid enormément mais j’aimerais qu’il affiche toute mes sous rubriques d’une seule. Je me doute qu’il faut mettre le id_parent quelques part mais ou ?

    Le menu afficherait toutes mes sous rubriques de "patrimoine" ainsi que les articles qui les conserne on fonction d’ou est l’internaute :

    * patrimoine(rubrique)
    *langeac(rubrique)
    - monsatère (article)
    - collègiale (article)
    *chanteuges(rubrique)

    Répondre à ce message

    Retour au début des forums

  • Menu OK sauf la dernière rubrique

    20 janvier 2005 18:51, par Serge

    Merci pour ce menu déroulant facile à implémenter.

    J’utilise SPIP v1-8b2 et FireFox 1.0 ainsi que Safari. J’emploie un menu à deux niveaux. Tout marche bien, sauf la dernière rubrique qui se déplie mal.

    cf. Livre d’Or : site.

    Répondre à ce message

    Retour au début des forums

  • Ce menu, et c’est dommage, génère un parse error si le titre d’une rubrique ou d’un article contient un ou des guillements ("). On obtient alors l’affichage suivant : Parse error: parse error, expecting `')'' in inc-public.php3(20) : eval()'d code on line 16. testé avec Spip 1.8.3.

    Une piste pour régler de petit problème ?

    ci-dessous le code proposé par la contrib à ajouter dans mes_fonctions.php3

    <?

    function denum($texte)
    {
            $toto=ereg_replace("^[0-9]*\. ","",$texte);
            return $toto;
    }

    function kenum($texte)
    {
     if (ereg ("^([0-9]*)\. ", $texte, $regs))
            return $regs[1];
    }

    ?>

    Répondre à ce message

    Retour au début des forums

  • menu hierarchique, rubriques/articles classés

    29 mars 2006 16:06, par Got

    Je cherche exactement ce type de menu sauf que je souhaite afficher seulement pour la rubrique en cours :

    + rubrique (en cours) - article1 - article2 + sous rubrique - article 1 - article 2 etc....

    donc je ne veut pas que le menu boucle sur toutes les rubriques mais je ne vois pas comment modifier le menu

    si quelqu’un a un idée merci d’avance

    Répondre à ce message

    Retour au début des forums

  • menu hierarchique, rubriques/articles classés

    21 janvier 2006 19:25, par p@ddy

    Bonjour, J’ai une structure
    root
    .site_a (rub1)
    ..allmand (rub11)
    ..englais
    .site_b (rub16)
    ..

    Le menu marche bien (avec le correction pour SPIP 1.8x :-).
    C’est possible de me positioner sur racine, ou un rubrique premier niveau comme (rub1 ou rub16).
    Mais si je me positionne sur la lang (rub11) le menu reste tout vide.

    site :
    [Protec Sardinia->http://protecsardinia.com.jovinus-m...] root
    [Protec Mexico->http://protecsardinia.com.jovinus-m...] rub 16

    Changement dans menu.html : <code> <BOUCLE_menu(RUBRIQUES) id_rubrique=16 par titre> ; (au lieu de racine) </code>

    Voir en ligne : sub-tree

    Répondre à ce message

    • menu hierarchique, rubriques/articles classés 27 janvier 2006 14:45, par p@ddy

      Après la correction pour SPIP 1.82 l’ include marchait correcte.

      Mais ce n’est pas possible de generer un sub-tree au niveau "lang" 2. niveau). Mais c’est possible de genere un sub-tree ou niveau d’un secteur (1. niveau).

      Pour affice le sub-tree "lang", il fallait chercher le rubrique correct dans le premier boucle.
      L’ affichange après c’est possible avec des paramètres correct, comme :
      ecrire_menu($level,$root) ; /* example : (2,11) */

      P.S.
      Subtree selectioné d’après la lanque.

      $lang="#LANG";
      /* alt:racine neu:wird auf "Site" aufgesetzt */
      <BOUCLE_menu(RUBRIQUES) {id_rubrique=1} {par titre}>
             <BOUCLE_menu_n(RUBRIQUES) {id_rubrique} {par titre}>
                     $menu[$i]["[(#TITRE|kenum)] - #ID_RUBRIQUE"]=array("parent"=>"#ID_PARENT","titre"=>"[(#TITRE|denum)]","idrub"=>"#ID_RUBRIQUE","idart"=>"");
                     $i++;

                     /* pog */
                     /* if ('#TITRE' == 'Deutsch'){ pog*/
                     /* echo("akt-spr:$lang"); */
                     if (!$lang) $lang='de';
                     if (    $i==2  /* check: correct lang-Sub-Tree */
                          && $lang==#LANG) {
                      /* echo("<br>#TITRE/#ID_RUBRIQUE/#LANG/$i"); */
                      $level=$i; $root='#ID_RUBRIQUE';
                     }
                     /* pog */
                     <BOUCLE_menu_a(ARTICLES) {id_rubrique} {par titre}>
                             $menu[$i]["[(#TITRE|kenum)] - #ID_ARTICLE"]=array("parent"=>"#ID_RUBRIQUE","titre"=>"[(#TITRE|denum)]","idrub"=>"","idart"=>"#ID_ARTICLE");
                     </BOUCLE_menu_a>
                     <BOUCLE_menu_r(RUBRIQUES) {id_parent} {par titre}>
                             <BOUCLE_sous_menu(boucle_menu_n)></BOUCLE_sous_menu>
                     </BOUCLE_menu_r>
                     $i--;
             </BOUCLE_menu_n>
      </BOUCLE_menu>

      ..

      ecrire_menu($level,$root);
       

      Voir en ligne : Virtual House Community

      Répondre à ce message

    Retour au début des forums

  • Limiter le menu au secteur en cours ?

    15 août 2005 12:45, par alain

    Ce menu fait exactement ce que je veux. Bravo et merci pour la contrib.

    Aujourd’hui j’ai un nouveau besoin : j’ai une barre d’onglets qui permet de choisir un des secteurs du site, avec mise en valeur du secteur en cours. Donc, pour la cohérence, il vaudrait mieux que le menu hiérachique n’affiche plus que les seules rubriques et les articles du secteur en cours de consultation.

    Précision : la page d’accueil n’affichera pas le menu hiérarchique. La barre d’onglet suffirait. Il n’y aurait donc plus de situation ou il faudrait afficher l’ensemble des secteurs...

    La modif serait-elle compliquée ? J’ai bien essayé de modifier les boucles, mais je tombe sur des problèmes de Javascript, et là je suis largué !

    D’avance merci à celui qui donnerait la soluce ;-)

    Répondre à ce message

    Retour au début des forums

  • Bonjour,

    Ce menu est tres sympa et facilement personnalisable sauf que... je souhaiterai qu’il m’affiche en rubrique tete non pas le secteur (j’ai fait une restricition par secteur en cours) mais les rubriques n-1 du secteur en cours... Ex : soient 4 secteurs (pommes, poires, bananes). Si je selectionne "pommes", je souhaite qu’il m’affiche :

    • golden,
    • granny,
    • ...

    sans qu’il soit fait mention de "pommes".

    Quelqu’un a-t-il mis en oeuvre ce genre de boucle ?

    Merci.

    Répondre à ce message

    Retour au début des forums

  • Cette contrib m’interesse au plus haut point mais non pas pour les rubriques mais pour la liste d’auteurs. En effet mon site grandi en permanence et j’ ai environ 60 auteurs. A la fin de l’année j’en serai aux alentours de 200 ! Comment peut-on faire un menu arborescent comme celui ci +A +B +C etc... pour retrouver tous mes auteurs sans être obligé de les aligner en deux ou trois colonnes et me retrouver avec des pages au kilomètres ?
    Sinon bravo pour toutes les fabuleuses contrib que je lis ici et notamment celle-ci.

    Répondre à ce message

    Retour au début des forums

  • Depuis que je suis passé en version 1.8.

    Si je met dans la page article.html

            <INCLURE(menu.php3){id_rubrique}>

    Le menu n’affiche pas l’article active en rouge dans le menu.

    Pour les modifs du fichier menu.html ... J’ai du mal a comprendre où faut-il ajouter et quoi.

    Bon y en a qui y sont arrivé ... je ne sais pas comment ... Merci de votre aide.

    Je tourne en rond.

    Répondre à ce message

    Retour au début des forums

  • > menu hierarchique, rubriques/articles classés

    15 avril 2005 14:23, par Caroline

    Bonjour, je viens d’installer cette contrib sur mon site en local (Spip 1.8). Le message que j’obtiens est : " Parse error : parse error, unexpected T_STRING, expecting ’)’ in c :\program files\easyphp1-7\www\intranetl\spip-v1-8\inc-public.php3(20) : eval()’d code on line 22".

    Après avoir lu les autres messages, j’ai donc suivi leurs recommandations :
    - pour appeler le menu, j’ai mis
    - dans "menu.html", (ligne 58)j’ai mis (ligne 65)j’ai mis

    et ça ne fonctionne tjrs pas. Est-ce que vous pouvez m’aider ? Merci !

    Caroline

    Répondre à ce message

    • > menu hierarchique, rubriques/articles classés 15 avril 2005 14:30, par Caroline

      Désolée, c’est encore Caroline... Mon message ne s’est pas affiché convenablement...

      je viens d’installer cette contrib sur mon site en local (Spip 1.8). Le message que j’obtiens est : " Parse error : parse error, unexpected T_STRING, expecting ’)’ in c :\program files\easyphp1-7\www\intranetl\spip-v1-8\inc-public.php3(20) : eval()’d code on line 22".

      Après avoir lu les autres messages, j’ai donc suivi leurs recommandations :
      - pour appeler le menu j’ai mis dans INCLURE uniquement id_rubrique
      - dans "menu.html", pour la boucle hierarchie (ligne 58)j’ai rajouté id_article (ligne 65)j’ai rajouté id_rubrique

      et ça ne fonctionne tjrs pas. Est-ce que vous pouvez m’aider ? Merci !

      Caroline

      Répondre à ce message

    Retour au début des forums

  • Bug avec les guillemets

    22 février 2005 01:35, par Stéphane

    Après qq essais avec les v 1.7.2 et la 1.8.b6 j’ai constasté que l’utilisation des guillemets (") dans les noms de rubrique ou titres d’article provoquait un "Parse error..." comme signalé sur ce forum.

    ça le fait chez vous ?

    sinon merci pour la contrib.

    Répondre à ce message

    Retour au début des forums

  • > menu hierarchique, rubriques/articles classés

    14 mars 2005 21:46, par jmarco

    Bonsoir, super cette contrib, çà marche dans la 1-7 et la 1-7.2 sans problème, mais dans la 1-8 pr1 : plus rien ne s’affiche .... aurais-je fait une erreur quelques part ? je ne vois pas . merci jmarco

    Répondre à ce message

    • > > menu hierarchique, rubriques/articles classés 15 mars 2005 19:49, par Barthélémy

      Apparemment sur la version 1-8B5 ça ne marche pas non plus, du moins chez moi.

      Pourtant, il semble que le choix de la version 1.7 pour la démonstration n’est été fait qu’à titre d’exemple, puisqu’il est précisé dans les mots clés que ce squelette est valable pour toutes les versions de SPIP ...

      Y a t-il un moyen de corriger le problème d’affichage ? Merci

      Répondre à ce message

      • Bonjour, en fait après un petit tour sur la liste,

        sur la 1-8pr1 il faut appliquer autrement

        id_rubrique et id_article, du coup j’ai fait :

        INCLURE(menu.php3)id_rubrique à la place de INCLURE(menu.php3)id_rubrique id_article et tout fonctionne normalement aussi bien sur les pages rubriques que sur les pages articles.

        + jmarco

        — -> réponse obtenue sur la liste :

        yorghos.remvikos> writes :

        > > Bonsoir, > Le menu dans son écriture initiale comporte une erreur de syntaxe de la > boucle hierarchie. Il manque à chaque fois le critère id_article et > id_rubrique. Sur les versions 1.8, il faut toujours penser à utiliser > la fonction debug. Elle s’avère souvent bien utile car les versions 1.7 > étaient bien tolérantes. > + > Yorghos

        Répondre à ce message

        • Merci beaucoup pour cette réponse vraiment très rapide !

          Cependant je dois avouer que j’ai mal posé la question, ce qui évidemment impossible toute résolution du problème. En fait il ne s’agit pas d’un problème d’affichage qui touche l’appel du menu, mais un message d’erreur qui s’affiche à l’ouverture de menu.php3. Il s’agit de ce message :

          Warning : ksort() expects parameter 1 to be array, null given in /disque2/home/letrelu/www/inc-public-global.php3(107) : eval()’d code on line 59

          Warning : Invalid argument supplied for foreach() in /disque2/home/letrelu/www/inc-public-global.php3(107) : eval()’d code on line 60

          (/letrelu/ étant le nom du dossier racine)

          Ce qui me semble louche, c’est que tout semble marcher sur une version témoin qui utilise la version 1.7.2

          Je suis sceptique .... ;)

          Merci encore

          Barthélémy

          Répondre à ce message

    Retour au début des forums

0 | 25 | 50



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net