Menu hierarchique dynamique(urgent)

aymoun888 Messages postés 146 Statut Membre -  
burnedsyn Messages postés 174 Statut Membre -
Bonjour,
Svp je veux créer un menu hiérarchique dynamique en PHP qui remplit ces rubriques a partir de la base de donnés mysql

j'ai crée une base, avec une table qui comporte les champs suivants:

_id
_label
_lien
_id_parent

je veux obtenir un menu ainsi:

Menu1
_sousmenu1.1
_sousmenu1.2
Menu2
_sousmenu2.1
__sousmenu2.1.1
__sousmenu2.1.2
_sousmenu2.2
Menu3
_sousmenu3.1
..........et ainsi de suite

merci d'avance
Configuration: Windows XP
Firefox 2.0.0.14

5 réponses

  1. burnedsyn Messages postés 174 Statut Membre 16
     
    Bonjour,
    bien que ton probleme soit urgent ne le poste pas plusieurs fois stp efface tes autres post concernant le meme sujet oki :d
    Bien voici un exemple pour réaliser ce que tu demandes.

    Première chose _id_parent a quel valeur quand c'est un menu primaire (0?)

    si oui alors :
    $nomtable="nom de ta table";
    function getSubMenu($id)
    {
    /*fonction recursive qui peut s'appeller elle meme */
    $query="select * from $nomtable where _id_parent=$id";
    $res2=mysql_query($query) or die ('erreur mysql'.mysql_error());
    while ($f=mysql_fetch_object($res2))
    {
    /*on utilise echo poiru faire simple*/
    echo("<a href='".$f->_lien."' >".$f->_label."</a>);
    getSubMenu($f->_id);
    
    }
    
    }//fin getsubmenu
    
    $query="select * from $nomtable where _id_parent=0";
    $res=mysql_query($query) or die ('erreur mysql'.mysql_error());
    while ($t=mysql_fetch_object($res))
    {
    /*on utilise echo poiru faire simple*/
    echo("<a href='".$t->_lien."' >".$t->_label."</a>);
    getSubMenu($t->_id);
    
    }
    
    


    Voila normalement tu as ton menu de construit avec tout tes sous menus teste et dis moi quoi car je n'ai pas pu tester ce code je te le mets en le codant vite fait enfin voila tu as une piste !

    //Vraiment pas sur que ca fonctionne parfaitement. ca peut bloquer dans getsubmenu si tu as plusieurs niveau de sous menu

    Bye a bientot
    Tim
    0
    1. burnedsyn Messages postés 174 Statut Membre 16
       
      Bonsoir désolé je n'étais plus la quand tu as répondu
      voici le script corrigé

      $nomtable="matable";
      function getSubMenu($id)
      {
        /*fonction recursive qui peut s'appeller elle meme?
      
        Elle sert a créer les sous menu uniquement tout le niveau 0 est traité
        en dessous ici on se penche sur les menu ayant un parent différent de 0
        la fonction prend un argument qui est l'id parent et on cherche les sous menu
        a cet id particulie, toutefois ici ca ne marche pas si tu as plus d'un niveau
        de sous menu*/
      $query="select * from $nomtable where _id_parent = $id";
      $res2=mysql_query($query) or die ('erreur mysql'.mysql_error());
      while ($f=mysql_fetch_object($res2))
      {
      /*on utilise echo poiru faire simple*/
      echo("<a href='".$f->_lien."' >".$f->_label."</a><br>");
      getSubMenu($f->_id);
      
      }
      
      }//fin getsubmenu
      
      $query="select * from $nomtable where _id_parent=0";
      $res=mysql_query($query) or die ('erreur mysql'.mysql_error());
      while ($t=mysql_fetch_object($res))
      {
      /*on utilise echo poiru faire simple*/
      echo("<a href='".$t->_lien."' >".$t->_label."</a><br>");
      /*on verifie qu'il n'y a pas un sous menu en appelant la fonction précedement
      definie*/
      getSubMenu($t->_id);
      
      }
      
      
      0
  2. aymoun888 Messages postés 146 Statut Membre 13
     
    merci,
    mais ça marche pas convenablement, il construit les menus, mais l'hiérarchie ne convient pas

    il m'imprime quelque chose comme ça

    sousmenu1 menu1 menu2..........

    stp laisse moi des commentaires qui m'explique le role de chaque fonction

    remarque: l'id n'a aucun role à la construction de menu, juste on doit compter sur l'id_parent, 0 signifie menu principale
    1 signifie que c un sousmenu de menu1
    2 signifie que c un sousmenu de menu2
    .....................

    merci beacoup
    0
  3. aymoun888 Messages postés 146 Statut Membre 13
     
    euh, je veux vous expliquez un peu plus;

    voici le menu qu'il doit se remplir a partir de la BDD

    <html>
    <head>
    <style type="text/css">
    ul ul {display:none; position:absolute; left: 144px; top: -1px; margin:0px; padding: 0px; border: 1px solid #B0B0B0; font-weight:bold; color:#000000;}
    ul.niveau2 {left: 0px; top: 22px;}
    ul.niveau3 {left: 144px; top: -1px;}
    li {list-style-type: none; position: relative; width: 140px; background-color: #99CCCC; padding: 2px; margin: 0px}
    li:hover, li.sfhover {background-color: #FFCC00;}
    li:hover ul.niveau2, li li:hover ul.niveau3, li.sfhover ul.niveau2, li li.sfhover ul.niveau3 {display: block}
    li.plus {background-position:right; background-image: url(illustrations/fdroite.gif); background-repeat: no-repeat; border-bottom: 1px solid #B0B0B0;}
    </style>

    <body>

    <center>
    <ul class="niveau1">
    <li> <b>Menu</b>
    <ul class="niveau2">
    <li class="plus">BDD
    <ul class="niveau3">
    <li><a href="afficher.php">Afficher</a></li>
    <li><a href="ajout.php">Ajouter</a></li>
    <li><a href="supprimer.php">Suppimer</a></li>
    <li>Sous Menu 1.4</li>
    </ul>
    </li>
    <li class="plus">Sous Menu 2
    <ul class="niveau3">
    <li>Sous Menu 2.1</li>
    <li>Sous Menu 2.2</li>
    <li>Sous Menu 2.3</li>
    <li>Sous Menu 2.4</li>
    </ul>
    </li>
    <li class="plus">Sous Menu 3
    <ul class="niveau3">
    <li>Sous Menu 3.1</li>
    <li>Sous Menu 3.2</li>
    <li>Sous Menu 3.3</li>
    <li>Sous Menu 3.4</li>
    </ul>
    </li>
    <li class="plus">Sous Menu 4
    <ul class="niveau3">
    <li>Sous Menu 4.1</li>
    <li>Sous Menu 4.2</li>
    <li>Sous Menu 4.3</li>
    <li>Sous Menu 4.4</li>
    </ul>
    </li>
    </ul>
    </li>
    </ul>

    </center>
    </body>
    </html>

    </body>
    </html>

    j'espere que c'est un peu plus clair

    merci de votre aide
    0
  4. aymoun888 Messages postés 146 Statut Membre 13
     
    bhen , je vous avez donnez le code du menu
    ce menu je l'ai remplit manuellement et directement a partir du code
    mais moi je veux que ce menu serai remplit avec les données de la BDD
    exemple:
    id____label____lien_____id_parent
    1_____menu1____"..."______0
    2_____menu2____"..."______0
    3_____menu3____"..."______0
    4 sousmenu1.1__"..."______1
    5 sousmenu2.2__"..."______2
    6 sousmenu2.1__"..."______2
    7 sousmenu1.2__"..."______1

    donc j'obtient

    Menu1_____________Menu2
    sousmenu1.1_______sousmenu2.2
    sousmenu1.2_______sousmenu2.1

    et ainsi de suite

    j'espere bien ke cela vous eclaircir
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. aymoun888 Messages postés 146 Statut Membre 13
     
    merci beaucoup, brunedsyn
    0
    1. burnedsyn Messages postés 174 Statut Membre 16
       
      Bonsoir,

      Voici un methode te permettant un niveau de sous menu infini

      tu dois ajouter un champ dans ta table celui-ci est _hassub un booleen

      ensuite ce script fera le necessaire a toi de bien présenter les chose dans ton projet tu as les données a toi de les présenter...


      bonne continuation ;)

      Tim

      <?php
       
      $nomtable="matable";
      function getSubMenu($id)
      {
      
        /*fonction recursive qui peut s'appeller elle meme.
      
        Elle sert a créer les sous menu uniquement tout le niveau 0 est traité
        en dessous ici on se penche sur les menu ayant un parent différent de 0
        la fonction prend un argument qui est l'id parent et on cherche les sous menu
        a cet id particulie, toutefois ici ca  marche si tu as plus d'un niveau
        de sous menu et ce grace au champs _hassub qui permet de verifier la présence d'un sous menu et ce sur n'importe quel nombre de sous niveau tout en évitant de sur utilisé la récursivité en appelant systématiquement notre fonction sur tous les id qui passe ici*/
      
      $query="select * from $nomtable where _id_parent = $id";
      $res2=mysql_query($query) or die ('erreur mysql'.mysql_error());
      
      while ($f=mysql_fetch_object($res2))
      {
      
      /*on utilise echo pour faire simple*/
      echo("<a href='".$f->_lien."' >".$f->_label."</a><br>");
      if($f->_hassub)
      {
        getSubMenu($f->_id);
        }
      }
      
      }//fin getsubmenu
      
      $query="select * from $nomtable where _id_parent=0";
      $res=mysql_query($query) or die ('erreur mysql'.mysql_error());
      while ($t=mysql_fetch_object($res))
      {
      /*on utilise echo pour faire simple*/
      echo("<a href='".$t->_lien."' >".$t->_label."</a><br>");
      /*on verifie qu'il n'y a pas un sous menu en appelant la fonction précedement
      definie*/
      
      getSubMenu($t->_id);
      
      }
      
      ?>
      
      
      


      Si ceci résoud ton problème n'oublie pas de le signaler stp, merci
      tim
      0