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

Langage PHP Discussion :

Création d'un menu déroulant en php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 50
    Par défaut Création d'un menu déroulant en php
    Bonjour, je viens vous demander de l'aide pour la création d'un menu déroulant.
    Ce menu se déroule plusieurs fois sans limites de niveau (il peut y avoir des souscatégories).

    Ce menu en html css est développé et fonctionne mais désormais je dois le mettre en php afin que les catégories ajoutés ou supprimés de la BDD soient mises à jour sur le menu.

    En html le menu est développé ainsi :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <ul>
    <li class="first"><a href="./">Accueil</a></li>
    	<li class="dir">La ville
    		<ul>
    			<li class="first"><a href="./">Histoire</a></li>
    			<li><a href="./">Patrimoine</a></li>
                            <li><a href="./">Aménagement urbain</a></li>
                            <li><a href="./">Logement</a></li>
                            <li><a href="./">Environnement</a></li>
    			<li class="last"></li>
     
    		</ul>
    	</li>
    	<li class="dir">La mairie
    		<ul>
    			<li class="first"><a href="./">Le mot du maire</a></li>
    			<li><a href="./">Les services</a></li>
    			<li><a href="./">Le conseil municipal</a></li>
    			<li><a href="./">Bulletins municipaux</a></li>
                            <li><a href="./">Offres d'emploi</a></li>
                            <li class="dir"><a href="./">Vos démarches</a>
                	                  <ul>
    					<li class="first"><a href="./">Etat civil</a></li>
    					<li class="dir"><a href="./">Urbanisme</a>
     
                                                   <ul>
    							<li class="first"><a href="./">1</a>
    							<li><a href="./">2</a></li>
    							<li><a href="./">3</a></li>
    							<li><a href="./">4</a></li>
    							<li><a href="./">5</a></li>
                                                            <li class="last"></li>
    						</ul>
                                            </li>
    					<li><a href="./">Etranger en France</a></li>
    					<li><a href="./">Réservation de salles</a></li>
                                           <li class="last"></li>
    				</ul>
                            </li>
    			<li><a href="./">Elections</a></li>
                            <li class="last"></li>
    		</ul>
    	</li>
    <ul>
    C'est donc tout simple en Html avec des ul et des li successifs. En php j'ai developpés le même résultats avec une boucle qui va chercher toutes les rubriques de 1er niveaux ainsi :

    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
     
    <?php
    $sql = "SELECT * FROM rubrique WHERE id_parent='0' ORDER BY rubrique.ordre";
    $sth = $dbh->query($sql);
    $menu = $sth->fetchAll();
    $nombre = count($menu);
    ?>
    <ul>
    		 <li class="debut"><a>&nbsp;</a></li>
    		<?php
            foreach($menu as $row){
     
    		echo "<li class='classic'><a href='./'>".$row['intitule']."</a></li>";
            }
            ?>
     
        <li class="fin"><a>&nbsp;</a></li>
     
    </ul>
    Donc là pas de problème le premier niveau apparaît et je peux faire 1 ou 2 niveaux supplémentaires (souscatégories et soussouscatégories) en faisant des boucles supplémentaires. Mais en faisant cela mon menu sera limité à 3 niveaux.

    LA QUESTION EST DONC LA SUIVANTE, avez vous une piste à me donner pour je permette à ce menu à n'avoir aucune limite de profondeur...

    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut
    Tu peux ajouter en base un champ qui te permet de connaitre le niveau du menu pour chaque menu.
    Comme ça tu peux construire tes niveaux en comparant le niveau courant avec l'ancien pour savoir si :
    - Tu débutes un nouveau niveau
    - Tu continues un niveau
    - Tu fermes un niveau

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 50
    Par défaut
    Bonjour et merci de votre réponse.

    J'avais pensé également à ajouter un champs de niveau mais mais je suis tout de même obligé de faire autant de boucle manuellement qu'il y a de niveaux. A moins que vous ayez une solution.

    Voici mon exemple :

    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
     
    <?php
            foreach($menu as $row){
     
    		echo "<li class='classic'><a href='./'>".$row['intitule']."</a></li>";
     
                    if(enfant) alors 
                        <ul>
                        foreach($menu2 as $row){
     
    		echo "<li class='classic'><a href='./'>".$row['intitule']."</a></li>";
     
                           </ul>
            }
            ?>

    La j'ai bien un niveau supplémentaire si il y a des "enfants" mais si je veux qu'il y ai à l'infini des possibilités d'autres niveaux, comment faire ? Je ne vais pas prévoir avec des if( enfant) sur 10 ou 15 niveaux manuellement ? on doit bien pouvoir le gérer automatiquement ?

    Merci d'avance

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut
    En fait il faut faire un truc comme ça :

    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
     
    <?php
            $niveau = 1;
            foreach($menu as $row){ //les menus de tout niveau
            {
    	if($row['niveau'] > $niveau)
                          <ul>  //On descend d'un niveau
    	else if (($row['niveau'] < $niveau)
                          </ul> //On remonte d'un niveau
    	//on affiche le meu
    	echo "<li class='classic'><a href='./'>".$row['intitule']."</a></li>";
     
    	//on sauvegarde le niveau
    	$niveau = $row['niveau'] ;
            }
    ?>
    Cette solution nécessite de récupérer le menu dans le bon ordre.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 50
    Par défaut
    Merci de votre réponse.

    Mais c'est justement le problème comment obtenir tout le menu dans l'ordre alors que les id ne seront pas dans l'ordre ce qui les relies entre eux est juste le champs id_parent.

    Je tourne en rond

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 11
    Par défaut
    Dans ce cas il faut ajouter un champ position pour connaitre la position du menu.

    Peux tu sinon me dire les contraintes que tu as par rapport aux données que tu disposes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. création d'un menu déroulant
    Par coco38 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/04/2007, 11h15
  2. Réponses: 10
    Dernier message: 22/03/2007, 09h36
  3. [Tableaux] Menu déroulant en PHP
    Par dunbar dans le forum Langage
    Réponses: 4
    Dernier message: 11/08/2006, 11h22
  4. Réponses: 8
    Dernier message: 06/07/2006, 09h19
  5. menu déroulant en php
    Par Husqvarna dans le forum Langage
    Réponses: 2
    Dernier message: 10/10/2005, 14h26

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