SPIP - Contrib

SPIP - Contrib

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

81 visiteurs en ce moment

fontsizeup fontsizedown
Accueil du site > Contribs > Navigation > Menus contextuels > Menu hierarchique, rubriques/articles classés
[59 commentaires]

Menu hierarchique, rubriques/articles classés

dimanche 5 septembre 2004, par m.

1 vote

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.

Retour en haut de la page

59 Messages de forum

Voir toute la discussion

Pages 1 | 2 | 3 | 4 | 5 | 6

  • Répondre à ce message

    26 décembre 2008 19:04

    Bonsoir a tous,

    voici la solution que Fred m’a donnée sur la liste de spip :

    dans le fichier "menu.html" il faut rajouter :

    global $menu;

    entre

    <?php

    et

    $i=0;
    <BOUCLE_menu(RUBRIQUES)...

    au debut du fichier.

    Et tout fonctionne en Spip2.0.x

    Bonnes fêtes,

    Jmarco

  • Répondre à ce message

    17 décembre 2008 10:11

    Bonjour, je reviens sur ce menu qui ne veut toujours pas fonctionner sur spip 2.0 (dernier post du mois de septembre) pourtant je vois qu’en haut de cette page Spip 2.0 est bien là, donc que ce menu devrait fonctionner... si quelqu’un l’a fait, il serait bon de savoir comment, dans rubrique.html j’ai :

    <INCLURE{fond=inc/inc-menu}{id_rubrique} />

    et j’ai toujours ces warnings

    Warning: ksort() expects parameter 1 to be array, null given in /mnt/pingouin/00sites/10-03-2008-www/www/00le-clapotis/ecrire/public/assembler.php(534) : eval()'d code on line 347

    Warning: Invalid argument supplied for foreach() in /mnt/pingouin/00sites/10-03-2008-www/www/00le-clapotis/ecrire/public/assembler.php(534) : eval()'d code on line 348

    merci d’avance, j’ai 3 sites qui attendent pour passer en v2.0, et ce menu est bien.

    Cordialement, Jmarco

  • Répondre à ce message

    25 septembre 2008 00:38 , par Jmarco

    Bonsoir, je viens d’installer la spip v2.0 beta2 12774, et ce menu ne répond plus. A la place j’ai :: > Warning : ksort() expects parameter 1 to be array, null given in /mnt/pingouin/00sites/10-03-2008-www/www/spip2beta/ecrire/public/assembler.php(533) : eval()’d code on line 340

    > Warning : Invalid argument supplied for foreach() in /mnt/pingouin/00sites/10-03-2008-www/www/spip2beta/ecrire/public/assembler.php(533) : eval()’d code on line 341 Est-ce que certain d’entre-vous ont ce probleme ? Mon test est en local, bien-sûr.

    je confirme que sur la 1.9.2e il fonctionne très bien.

    Merci de vos réponses, amicalement, Jmarco

  • Répondre à ce message

    13 août 2008 12:31

    j’ai en fait une question. On a une rubrique, une sous rubrique, puis disons un article. Comment puis je faire pour nommer l’article : title ; "nom de la rubrique - nom de la sous rubrique". ?

    merci

  • Répondre à ce message

    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

    23 février 2007 00:29 , par jmarc dufour

    Bonsoir,

    je viens de migrer (le-clapotis.net) vers Spip 1.9.2 en local bien-sur, et ce menu marche très bien avec les modifs ci-dessus decrites.

    + Jmarco

  • Répondre à ce message

    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

    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

    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

    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)

Pages 1 | 2 | 3 | 4 | 5 | 6

Répondre à cet article

Retour en haut de la page

Ça discute par ici