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 :

Menu dynamique PHP/MySQL


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut Menu dynamique PHP/MySQL
    Bonjour à tous,
    Je souhaite faire un menu déroulant dynamique. Le déroulement importe car je le fais en JS. Tout ce que je veux et qui me tabasse jusqu'à présent, mettre une petite image (puce ou ») après un item qui a des sous éléments (sous menu). Je vous donne mon code. Il marche parfaitement, je n'arrive pas mettre une puce sur un lien qui a des enfants.

    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 
    function menu_haut($id_page){
    $sql = 'Select * from pages where Id_parent = '.$id_page;
    $result = mysql_query($sql);
    if(mysql_num_rows($result)>0){
    echo '<ul>';
    while($data = mysql_fetch_array($result)){
     
    						echo'<li>'.$data['Id_page'];
    						menu_haut($data['Id_page']);
    						echo'</li>';
    						}
    echo '</ul>';
    }
    }
     
    menu_haut(1);
     ?>
    C'est tout...

    Merci bien pour votre aide...

  2. #2
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Bonjour ! Ce n'est pas ça?:

    Code php : 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 
    function menu_haut($id_page){
    $sql = 'Select * from pages where Id_parent = '.$id_page;
    $result = mysql_query($sql);
    if(mysql_num_rows($result)>0){
    echo '<ul type="square">';
    while($data = mysql_fetch_array($result)){
     
    						echo'<li>'.$data['Id_page'];
    						menu_haut($data['Id_page']);
    						echo'</li>';
    						}
    echo '</ul>';
    }
    }
     
    menu_haut(1);
     ?>

    Fait aussi attention que ta liste ne se trouve pas dans une DIV ayant comme propriété CSS :

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    list-style-type: none;

    EDIT :
    type="square"
    peut être mis dans <li> aussi
    ►Ne pas oublier le

  3. #3
    Membre confirmé Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Points : 547
    Points
    547
    Par défaut
    Salut,

    Dans la requête SQL de ta fonction ajoute un COUNT du nombre d'enfant groupé sur l'identifiant de la page. Ce résultat te permettra de connaître l'existence d'enfant.
    Ensuite, une simple condition. Si le nombre d'enfant est <> de 0. tu ajoutes un attribut de class (CSS) à ta balise <li>... Et puis tu joues avec ta feuille de style.

    Voilà voilà!

    ++

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par defcon_suny Voir le message
    Salut,
    Dans la requête SQL de ta fonction ajoute un COUNT du nombre d'enfant groupé sur l'identifiant de la page. Ce résultat te permettra de connaître l'existence d'enfant.
    Ensuite, une simple condition. Si le nombre d'enfant est <> de 0. tu ajoutes un attribut de class (CSS) à ta balise <li>... Et puis tu joues avec ta feuille de style.

    Voilà voilà!
    ++
    Bonjour et déjà merci,
    Avec votre algo, je pense avoir la solution, mais pouviez vous modifier mon code, pour voir de près ?

    Merci d'avance

    Un truc de ce genre

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Code php : 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 
    //début identique
     
    	echo'<li>'.$data['titre_page'];
    	menu_haut($data['Id_page']);
    	echo'</li>';
     
    //fin identique
     
    Je veux ceci pour un <li> qui des enfants :
    	echo'<li>'.$data['titre_page'].' »';
    	menu_haut($data['Id_page']);
    	echo'</li>';
     ?>

  6. #6
    Membre confirmé Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Points : 547
    Points
    547
    Par défaut
    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 
    //début identique
     
    	echo'<li>'.$data['titre_page'];
    	menu_haut($data['Id_page']);
    	echo'</li>';
     
    //fin identique
     
    Je veux ceci pour un <li> qui des enfants :
    	echo'<li class="monstyle">'.$data['titre_page'].' »';
    	menu_haut($data['Id_page']);
    	echo'</li>';
     ?>
    Et dans ta feuille de style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .monstyle{
    list-style: disc;
    }

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par defcon_suny Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php 
     //Je veux ceci pour un <li> qui des enfants :
    	echo'<li class="monstyle">'.$data['titre_page'].' »';
    	menu_haut($data['Id_page']);
    	echo'</li>';
     ?>
    Et dans ta feuille de style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .monstyle{
    list-style: disc;
    }
    Je suis d'accord mais je recherche donc cette fonction menu_haut() qui détecte quand un item contient des sous item.

    Si oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    	echo'<li class="monstyle">'.$data['titre_page'].' »';
    	menu_haut($data['Id_page']);
    	echo'</li>';
    ?>
    Dans le cas contraire,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    	echo'<li>'.$data['titre_page'].'</li>';
    ?>
    Merci d'avance...

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par okoweb Voir le message
    Je suis d'accord mais je recherche donc cette fonction menu_haut() qui détecte quand un item contient des sous item.

    Si oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    	echo'<li class="monstyle">'.$data['titre_page'].' »';
    	menu_haut($data['Id_page']);
    	echo'</li>';
    ?>
    Dans le cas contraire,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    	echo'<li>'.$data['titre_page'].'</li>';
    ?>
    Merci d'avance...
    J'essaie ceci ça donne pas
    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
     
    <?php
    function menu($id_page){
    $sql = 'select Id_page, count(*) as `nbre`, titre from pages where Id_parent = '.$id_page;
    $resultat = mysql_query($sql);
    echo '<ul>';
    while($data = mysql_fetch_array($resultat)){
    if($data['nbre']>0){
    	echo'<li class="monstyle">'.$data['titre'].' »';
    	menu($data['Id_page']);
    	echo'</li>';
    	}
    	else {echo '<li>'.$data['titre'].'</li>';}
    }
    echo '</ ul>';
    }
    ?>
    Merci

  9. #9
    Membre confirmé Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Points : 547
    Points
    547
    Par défaut
    Bien bien... tu approches mais il me semble que tu as oublié la clause group by de ta requête SQL.

    Pour voir le résultat de ta requête copie la et colle la directement dans phpMyAdmin... tu pourras ainsi tester le résultat ;-)

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par defcon_suny Voir le message
    Bien bien... tu approches mais il me semble que tu as oublié la clause group by de ta requête SQL.

    Pour voir le résultat de ta requête copie la et colle la directement dans phpMyAdmin... tu pourras ainsi tester le résultat ;-)
    J'arrive pas. Pouviez vous me venir en aide, je sèche et c'est urgent.

    Meilleures salutations.

  11. #11
    Membre confirmé Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Points : 547
    Points
    547
    Par défaut
    Ta requête doit être formulée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT champ1, champ2, COUNT(*) 
    FROM ma_table 
    WHERE condition=1
    GROUP BY champ1, champ2
    Comprends tu?

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par defcon_suny Voir le message
    Ta requête doit être formulée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT champ1, champ2, COUNT(*) 
    FROM ma_table 
    WHERE condition=1
    GROUP BY champ1, champ2
    Comprends tu?
    Non. pourquoi ce GROUP BY? Je veux compter le nombre d'enfants pour tout parent.
    JE vais bien m'expliquer. Pour le menu de mon site, il me suffit de faire menu(1), 1 étant id_page de la page d'accueil. Et si un enfant (Id_page) d'accueil (Id_parent) a aussi des enfants, on lui applique aussi la fonction menu(Id_page) (recursivité), de manière à générer le menu général de mon site à la volée.
    Je sèche merci.

    Merci pour tout

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par defcon_suny Voir le message
    Ta requête doit être formulée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT champ1, champ2, COUNT(*) 
    FROM ma_table 
    WHERE condition=1
    GROUP BY champ1, champ2
    Comprends tu?
    oui j'ai trouvé cette requette pour me donner le nombre d'enfants pour un parent donné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT Id_page, COUNT(Id_page) AS nbre, Id_parent, titre FROM pages WHERE Id_parent='.$id_page.' GROUP BY Id_parent;
    .

    Mais avec cette requette je n'ai pas pu arrivé à la solution :
    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
     
    function getChild($id_page){
    $sql = 'SELECT Id_page, COUNT(Id_page) AS nbre, Id_parent, titre FROM pages WHERE Id_parent='.$id_page.' GROUP BY Id_parent';
    $resultat = mysql_query($sql);
    echo '<ul>';
    while($data = mysql_fetch_array($resultat)){
    if($data['nbre']>0){
    	echo'<li class="monstyle">'.$data['titre'].' »';
    	menu($data['Id_page']);
    	echo'</li>';
    	}
    	else {echo '<li>'.$data['titre'].'</li>';}
    }
    echo '</ul>';
    }
    Ayant beaucoup cherché, j'ai plutôt trouvé cette autre solution en passant par 2 fonctions :
    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
     
    <?php
    //Retourner le nombre d'enfants d'une page donnée
    function getChild($id_page){
    $sql = 'SELECT * FROM pages WHERE Id_parent='.$id_page;
    $result = requete_SQL($sql);
    return mysql_num_rows($result);
    }
     
    //lister les pages d'un parent
    function listChild($id_page) {
        // Sélectionne l'ensemble des pages filles de la page courante
        $strSQL = "SELECT * FROM pages WHERE Id_parent = ".$id_page;
        $resultat = requete_SQL($strSQL);
        // Si la requête a renvoyé des résultats
        if (mysql_affected_rows() !=0) {
            echo '<ul>';
            // Tant qu'il y a des pages filles, on affiche un lien vers elle
            // et pour chacune d'elle, on rappelle la fonction
            while ($tabl_result = mysql_fetch_array($resultat)) {
                echo '<li';
    						//Si l'item a des enfants, on ajoute la classe à li
    						if(getChild($tabl_result['Id_page'])>0) echo' class="monstyle"';
    						echo '>';
                echo '<a href="index.php?id_p='.$tabl_result['Id_page'].'">';
                echo $tabl_result['titre'];
                echo '</a>';
    						//Si l'item a des enfants, on affiche la puce après le lien
    						if(getChild($tabl_result['Id_page'])>0) echo ' »';
                listChild($tabl_result['Id_page']);
                echo '</li>';
            }
            echo '</ul>';
        }
    }
     
    //Pour générer mon menu dynamique à la volée.
    listChild(1);
     ?>
    Merci...

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

Discussions similaires

  1. [MySQL] Menu dynamique PHP-MySQL
    Par marygil dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 20/07/2011, 20h21
  2. [DOM] menu dynamique php mysql javascript
    Par maxland dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/03/2009, 14h02
  3. [MySQL] Menu dynamique PHP / MySQL CSS
    Par mouchagheb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/06/2008, 11h33
  4. Réponses: 10
    Dernier message: 22/03/2007, 08h36
  5. [PostgreSQL] [PostGreSQL] menu dynamique php-postgre-css
    Par tyrann dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/11/2005, 17h23

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