Menu hierarchique dynamique(urgent)
aymoun888
Messages postés
146
Statut
Membre
-
burnedsyn Messages postés 174 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
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:
- Menu hierarchique dynamique(urgent)
- Menu déroulant excel - Guide
- Tableau croisé dynamique - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Canon quick menu - Télécharger - Utilitaires
- Windows 11 menu démarrer classique - Guide
5 réponses
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 :
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
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
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
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
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
Si ceci résoud ton problème n'oublie pas de le signaler stp, merci
tim
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
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); }