IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Conception] Génération d'un menu HTML multi-niveaux (indéfini)


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Points : 33
    Points
    33
    Par défaut [Conception] Génération d'un menu HTML multi-niveaux (indéfini)
    Bonjour,

    Mon titre n'est surement pas trés clair, donc j'ais essayé de vous faire comprendre au mieux mon souci :

    J'ai une BDD avec une table "menu" où sont stockées les entrées du menu que je veux afficher sur ma page..
    Dans cette table il y'a un champ parent_Id, qui contient l'id du menu parent si celui-ci en a un...

    Avec un exemple ça ira peut-être mieux...
    Si ma base est rempli comme-ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ID - PID - MENU
    1  - NULL - jaune
    2  - 1 - vert
    3  - NULL - bleu
    4  - 2 - rose
    5  - 4 - violet
    Mon menu devra ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    * jaune (menu sans PID)
    vert (sous-menu de "jaune")
    -rose (sous-menu de "vert")
    --violet (sous-menu de "rose")
    * bleu (menu sans PID)
    J'espère que mon mini-schéma est clair...

    Donc mon souci ici c'est je ne connais pas à l'avance le nombre de 'niveaux' qu'il va y avoir pour une entrée du menu (j'peut trés bien me retrouvé avec un sous-sous-sous-sous-menu ...)

    Le code suivant marche trés bien, mais seulement pour un seul sous-niveau..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $querySelectMenu = $db->query("SELECT * FROM menu WHERE menu_parentId IS NULL");
     
    while($rowMenu = $querySelectMenu->fetchRow())
    	$tableMenu[] = $rowMenu;
     
    foreach($tableMenu as $dataTableMenu){
    	$idMenu = $dataTableMenu['menu_id'];
    	echo "* ".$dataTableMenu['menu_nom']."[$idMenu]<br />";
     
    	$querySelectSousMenu = $db->query("SELECT * FROM Menu WHERE menu_parentId = $idMenu");
    	while($rowSousMenu = $querySelectSousMenu->fetchRow())
    		$tableSousMenu[] = $rowSousMenu;
     
    	foreach($tableSousMenu as $dataTableSousMenu){
    		$idMenu = $dataTableSousMenu['menu_id'];
    		echo $dataTableSousMenu['menu_nom']."<br />";
     
    		if($db->query("SELECT * FROM menu WHERE menu_parentId = $idMenu")->numRows() > 0) {
    			echo " - ssmenu<br/>";
    		}
    	}
     
    	$tableSousMenu = null;
    }
    (le "echo " - ssmenu<br/>";" est juste un test)

    Ce que j'aimerais c'est un code qui puisse fonctionner indépedemmant du nombre de ss-niveaux présent dans la BDD.

    Voilà n'hésitez pas si vous avez une idée ou si c'est pas clair...

    merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Pour ne pas être limité par le nombre de sous-niveaux, il faut passer par une fonction récursive.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function menu($id, $level)
    {
        global $db;
        $query = $db->query("SELECT * FROM menu WHERE menu_parentId=$id");
        while($rowMenu = $query->fetchRow())
        {
            echo str_repeat("-",$level);
            echo $rowMenu['menu_nom']."<br />";
            menu($rowMenu['menu_id'],$level+1);
        }
    }
     
    $query = $db->query("SELECT * FROM menu WHERE menu_parentId=$id");
    while($rowMenu = $query->fetchRow())
    {
        echo "* {$rowMenu['menu_nom']}<br />";
        menu($rowMenu['menu_id'],0);
    }

Discussions similaires

  1. [XL-2010] Menu déroulant multi-niveaux
    Par maxoulagalere dans le forum Excel
    Réponses: 18
    Dernier message: 08/01/2015, 16h29
  2. Menu multi niveaux en CSS
    Par mbar dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 29/06/2009, 01h58
  3. [Joomla!] Menu horizontal multi-niveaux
    Par erman_yazid dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 05/03/2008, 15h10
  4. Menu html
    Par BRAUKRIS dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 31/12/2004, 11h30
  5. Réponses: 10
    Dernier message: 06/06/2004, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo