<div id="menu">
<ul>
<li><a href="#">Menu 1</a></li>
<ul style="">
<li>testmenu 2</li>
</ul>
<ul style="">
<li>testmenu 1</li>
</ul>
<li><a href="#">Menu 2</a></li>
<ul style="">
<li>testmenu 1</li>
</ul>
<li><a href="#">Menu 3</a></li>
</ul>
</div>
J'ai essayer de faire un système comme on a fait avec $menu=null; mais je ne suis arrivé à rien de concret.<div id="menu">
<ul>
<li>
<a href="#">Menu 1</a>
<ul style="">
<li>testmenu 2</li>
<li>testmenu 1</li>
</ul>
</li>
<li>
<a href="#">Menu 2</a>
<ul style="">
<li>testmenu 1</li>
</ul>
</li>
<li>
<a href="#">Menu 3</a>
</li>
</ul>
</div>
C'est pour ça que je t'ai suggéré plus tôt de commencer par la fin : c'est ça que tu dois mettre au point dès le départ, avant même de travailler sur tes requêtes SQL : que dois-tu obtenir en bout de ligne ? Si tu as la réponse, alors remonte d'un cran et développe le code qui va te permettre de l'obtenir. //si on à pas encore de valeur à smenu, on l'initialise
if ($smenu!=$result['MenuMenu'])
{
$smenu=$result['MenuMenu'];
echo '<ul>';
}
//on affiche
$surl='index.php?s='.$result['SousMenuUrl'];
$sousmenu=$result['SousMenu'];
echo '<li><a href="'.$surl.'" />'.$sousmenu.'</a></li>';
//sinon
if ($smenu==$result['MenuMenu'])
{
echo '</ul>';
}
ça reviens au même, même pire<div id="menu">
<ul>
<li>
<a href="index.php?s=menu1" />Menu 1<a></li>
<ul>
<li><a href="index.php?s=Menu1SousMenu1" />Menu1SousMenu 1</a></li>
<li><a href="index.php?s=Menu1SousMenu2" />Menu1SousMenu 2</a></li>
</ul>
<li><a href="index.php?s=Menu1SousMenu3" />Menu1SousMenu 3</a></li>
</ul>
<li><a href="index.php?s=Menu2" />Menu 2<a></li>
<ul>
<li><a href="index.php?s=Menu2SousMenu1" />Menu2SousMenu 1</a></li>
<li><a href="index.php?s=Menu2SousMenu2" />Menu2SousMenu 2</a></li>
</ul>
<li><a href="index.php?s=" />Menu 3<a></li>
<ul>
<li><a href="index.php?s=Menu3SousMenu1" />Menu3SousMenu 1</a></li>
</ul>
</div>
Voici le code php que j'ai fait, je pense que le début est bon, mais pas la fin. $sql = "SELECT * FROM `Menu` AS p LEFT OUTER JOIN `SousMenu` AS t ON p.Id = t.MenuId ORDER BY p.Id, t.Id ASC;";
$res = mysql_query($sql);
$menu=NULL;
$smenu=NULL;
while ($result = mysql_fetch_assoc ($res))
{
if ($menu!=$result['Menu'])
{
$menu = $result['Menu'];
$url='index.php?s='.$result['MenuUrl'];
echo '<li><a href="'.$url.'" />'.$menu.'<a></li>';
// on vérrifie que SousMenu est bien le premier de la liste
if ($result['SousMenu']!=$smenu)
{
// on donne pour valeur à smenu, result_SousMenu
$smenu=$result['SousMenu'];
// on affiche le premier SousMenu, en initialisant la liste
$surl='index.php?s='.$result['SousMenuUrl'];
// on affiche
echo '<ul><li><a href="'.$surl.'" />'.$smenu.'</a></li>';
}
}
if ($menu==$result['Menu'])
{
// On vérifie que SousMenu n'a pas était déja traiter
if ($result['SousMenu']!=$smenu)
{
// on définit une nouvelle variable, et on lui donne pour valeur à smenu, result_SousMenu
$sousm=$result['SousMenu'];
$surl='index.php?s='.$result['SousMenuUrl'];
// on affiche
echo '<li><a href="'.$surl.'" />'.$sousm.'</a></li>';
//si malgrès tout, tous les SousMenu ont étaient traités, alors on feme la liste
if ($result['SousMenu']==$sousm)
{
echo '</ul>';
}
}
}
}
?>
Pour la fin j'ai penser faire un truc du genre....... (code similaire à celui du dessus)
//si malgrès tout, tous les SousMenu ont étaient traités, alors on feme la liste
if ($result['SousMenu']==$sousm)
{
echo '</ul>';
}
}
/* ICI L'idée */
// On vérifie que SousMenu n'a pas était déja traiter
if ($result['SousMenu']==$smenu)
{
echo '<li><a href="'.$surl.'" />'.$smenu.'</a></li></ul>';
}
Suis je sur le bonne voie?<div id="menu">
<ul>
<li><a href="index.php?s=menu1" />Menu 1<a></li>
<ul>
<li><a href="index.php?s=Menu1SousMenu1" />Menu1SousMenu 1</a></li>
<li><a href="index.php?s=Menu1SousMenu2" />Menu1SousMenu 2</a></li>
<li><a href="index.php?s=Menu1SousMenu3" />Menu1SousMenu 3</a></li>
<li><a href="index.php?s=Menu2" />Menu 2<a></li>
<ul>
<li><a href="index.php?s=Menu2SousMenu1" />Menu2SousMenu 1</a></li>
<li><a href="index.php?s=Menu2SousMenu2" />Menu2SousMenu 2</a></li>
<li><a href="index.php?s=" />Menu 3<a></li>
<ul>
<li><a href="index.php?s=Menu3SousMenu1" />Menu3SousMenu 1</a></li>
</ul>
</div>
Désolé si tu pense que je te fait perdre ton temps, j'ai pas pour habitude de le faire, mais là j'ai besoin de ce script, il me manque plus que ça et j'ai "fini" mon site. <div id="menu">
<ul>
<li>
<a href="index.php?s=Menu1">Menu1</a>
<ul>
<li>
<a href="index.php?s=Menu1">Menu1SousMenu1</a>
</li>
<li>
<a href="index.php?s=Menu1">Menu1SousMenu2</a>
</li>
<li>
<a href="index.php?s=Menu1">Menu1SousMenu3</a>
</li>
</ul>
</li>
<li>
<a href="index.php?s=Menu2">Menu2</a>
<ul>
<li>
<a href="index.php?s=Menu2">Menu2SousMenu1</a>
</li>
<li>
<a href="index.php?s=Menu2">Menu2SousMenu2</a>
</li>
</ul>
</li>
<li>
<a href="index.php?s=Menu3">Menu3</a>
<ul>
<li>
<a href="index.php?s=Menu3">Menu3SousMenu1</a>
</li>
</ul>
</li>
<li>
<a href="index.php?s=Menu4">Menu4</a>
</li>
</ul>
</div>
Pour le besoin, puisque c'est une maquette, j'ai ajouté un Menu4 sans sous-menu. Observe bien et note la manière d'imbriquer des listes à puces. Là, c'est du HTML, il est important que tu veilles à ce que ce code soit conforme et valide, donc par exemple, tes balises de liens avec <a />...</a>, c'est non conforme.<?php
$Hote = "VOTRE HOTE";
$Base = "VOTRE BASE";
$BaseLogin = "VOTRE LOGIN";
$BasePassword = "VOTRE MDP";
$mysql_link = mysql_connect($Hote, $BaseLogin, $BasePassword);
mysql_select_db($Base);
//on sélectionne la base de donnée
$sql = "SELECT ".
" p.Menu, ".
" p.MenuUrl, ".
" t.SousMenu, ".
" t.SousMenuUrl ".
"FROM `Menu` AS p ".
" LEFT OUTER JOIN `SousMenu` AS t ON p.Id = t.MenuId ".
"ORDER BY p.Id, t.Id ASC";
$res = mysql_query($sql);
$menu = null;
$listeOuverte = false;
$sousListeOuverte = false;
$nbl = mysql_num_rows($res);
// Si il n'y a pas de données
if($nbl == 0)
{
$sMenuHtml = <<<CODE_HTML
<div id="menu">
<ul id="menu">
<li class="imageSeparateur"><!--ne placer rien dans ce li --></li>
<li><a href="index.php">Accueil</a></li>
</ul>
</div>
CODE_HTML;
echo $sMenuHtml;
}
//sinon
else
{
// on ouvre la balise <ul> des menus, et si il y a des "<li></li>" de menus "fixés", on les place ici.
$sMenuHtml = <<<HTML
<div id="menu">
<ul id="menu">
<li><!--ne placer rien dans ce li --></li>
<li><a href="index.php">Accueil</a></li>
<!-- <li></li> fixés de menus -->
HTML;
//on boucle afin de construire la liste des liens
while(false !== ($result = mysql_fetch_assoc ($res)))
{
// On vérifie que le menu est le premier de la liste, SACHANT qu'on sait qu'il y 'en a.
if ($menu != $result['Menu'])
{
// Si la liste des menus est ouverte
if(true === $listeOuverte)
{
// Si la liste des sous-menus est ouverte
if (true === $sousListeOuverte)
{
// on la ferme la liste des sous-menus en définissant $sousListeOuverte sur FALSE
$sousListeOuverte = false;
// on ferme la balise </ul> de sousmenu
$sMenuHtml .= <<<HTML
</ul>
HTML;
}
//on la ferme la liste des menus en définissant $listeouverte sur FALSE
$listeOuverte = false;
// on ferme la balise </li> de menu
$sMenuHtml .= <<<HTML
</li>
HTML;
}
$menu = $result['Menu'];
// on donne une valeur TRUE à $listeouverte
$listeOuverte = true;
// on définit l'url des menus (si il y'en à tjs, sinon faire un if else à cette endrois)
$url='index.php'.$result['MenuUrl'];
// on ouvre la balise <li> de menu, et on affiche les menus
$sMenuHtml .= <<<HTML
<li>
<a href="{$url}">{$menu}</a>
HTML;
//Si il y a des sousmenus
if (!is_null($result['SousMenu']))
{
//on définit $souslisteouverte sur TRUE
$sousListeOuverte = true;
//on ouvre la balise <ul> des sousmenu attachés au menu parent
$sMenuHtml .= <<<HTML
<ul>
HTML;
}
}
// on s'assure qu'il y a un sous-menu
if(!is_null($result['SousMenu']))
{
// on définit l'url des sousmenus
$surl='index.php?s='.$result['SousMenuUrl'];
//on ouvre la balise <li> des sousmenu, on affiche les sousmenus sans un <a> et on ferme la balise </li>
$sMenuHtml .= <<<HTML
<li class="sousmenu">
<a class="sousmenu" href="{$surl}">{$result['SousMenu']}</a>
</li>
HTML;
}
}
// si la liste de menu est ouverte
if (true === $listeOuverte)
{
// on ferme la dernière balise </li> des menus, fermeture non traitée dans la boucle
$sMenuHtml .= <<<HTML
</li>
HTML;
}
// une fois la boucle terminée, on ferme la balise </ul> des menus, et éventuellement la balise </div>
$sMenuHtml .= <<<HTML
</ul>
</div>
HTML;
}
// on affiche le résultat via la variable $sMenuHtml
echo $sMenuHtml;
?>
Voila, je remercie Cyrano pour l'aide apporté, et j’espère que ce script serviras pour d'autre, ou du moins d’exemple afin de réussir là où j'ai échoué.