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
A voir également:

5 réponses

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aymoun888 Messages postés 146 Statut Membre 13
 
merci beaucoup, brunedsyn
0
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