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 :

Afficher les catégories et sous-catégories dans le Menu


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut Afficher les catégories et sous-catégories dans le Menu
    Bonjour, je n'arrive pas à afficher dans la barre de menu mes catégories et sous-catégories.

    Ma table catégories est de la forme suivante:

    id id_parent nom_fr nom_en ina=_form
    1 0 Accueil ... 0
    ...
    2 0 Immobilier ... 1
    201 2 Vente de Maisons ... 1
    202 2 Location de Maisons ... 1
    203 2 Vente d Appartements ... 1
    204 2 Location d Appartements ... 1
    205 2 Bureaux ... 1
    206 2 Terrains ... 1
    ...
    3 0 Véhicules ... 1
    301 3 Voitures ... 1
    301 3 Motos ... 1
    302 3 Accessoires ... 1
    ...
    4 0 Multimedia ... 1
    401 4 Téléphones ... 1
    402 4 Télévisions ... 1
    ...
    5 0 ... ... 1
    ...
    9 0 Contact 0

    La fonction getMenu:
    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
    function getMenu( $id_parent=0 )
    {
       global $bdd;
     
       $sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr'; // on s'assure que la langue est correcte
     
       $sql = "SELECT id, id_parent, nom_".$sql_lang." AS nom
    	FROM categories
    	WHERE id_parent = :id_parent
    	ORDER BY id
    	";
     
       try{
          $req = $bdd->prepare($sql);
          $req->execute( array(':id_parent'=>$id_parent) ); 
          $res =  $req->fetchAll(PDO::FETCH_ASSOC);
        }catch(Exception $e){
          echo "Erreur dans la requête " . $sql;
          $res = false;
        }
     
       return $res;
    }
    Et le code pour le menu:
    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
    <nav>
      <label for="menu-mobile" class="menu-mobile">Menu</label>
      <input type="checkbox" id="menu-mobile" role="button">
     
      <?php
    // 1- on récupère les menus principaaux
    $menus = getMenu( 0 );	
     
    foreach($menus as $M)
    {
    // 2- on récupère les sous-menu de CE menu
    $sous_menu = getMenu( $M['id'] ); 
     
    // Si il n'y a pas de sous-menus
    if( empty($sous_menu) )
    {
    echo "		<li> <a href= "affichage.php?id_catégorie="> ".$M['nom']."</a></li>";
    }
    // Sinon (il y a des sous-menus)
    else
    {
    echo "	<ul ><a href= "affichage.php?id_catégorie=">'".$M['nom']."' </a></ul>";
     
    // 3 - affichage des sous-menus
    foreach($sous_menu as $SM)
    {
    echo "		<li> <a href= "affichage.php?id_catégorie="> ".$SM['nom']."</a></li>";
    }
     
    echo "	</ul>";
    }
    }
    ?>
    Si vous pouvez m'apporter une aide, merci

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    affichez le contenu des variables pour voir à quel endroit vous n'avez pas les données nécessaires.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    Bonjour Mathieu, merci pour votre réponse. Vous voulez dire avec un var_dump? Si oui, je ne peux pas car j'ai l'erreur suivante:
    Fatal error: Cannot redeclare getMenu() (previously declared in

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    cela veut dire que vous avez déclaré 2 fonctions avec le même nom. dans le message d'erreur devrait être indiqués les 2 fichiers et les lignes de ces déclaration.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    C'était parce que j'avais inclus dans la page du header la page des fonctions (déjà incluse dans la page accueil.php).
    Le PROBLEME c'est que les menus et sous-menus s'affichent en même temps. Voici ce que ça donne en photo:
    Nom : C2.png
Affichages : 860
Taille : 37,9 Ko

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    Regarde le HTML produit, il y a un problème.

    Tu fais :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ul>Menu</ul>
    <li>Sous-menu 1</li>
    <li>Sous-menu 2</li>
    </ul>

    Alors qu'il faudrait :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <ul>
        <li>Menu
            <ul>
                <li>Sous-menu 1</li>
                <li>Sous-menu 2</li>
            </ul>
        </li>
    </ul>

    Indente correctement ton script, tu y verras plus clair

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    Bonjour Séb, tu as raison. Mais je n'arrive pas à voir le grain de sable. J'ai bidouillé et à chaque fois ça me donne un résultat différent.
    Du coup j'ai fait ç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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
      <?php
    // 1- on récupère les menus principaaux
    $menus = getMenu( 0 );	
     
    foreach($menus as $M)
    {
    // 2- on récupère les sous-menu de CE menu
    $sous_menu = getMenu( $M['id'] ); 
     
    // Si il n'y a pas de sous-menus
    if( empty($sous_menu) )
    {
    echo "		<li> <a href= 'affichage.php?id_catégorie'>".$M['nom']."</a></li>";
    }
    // Sinon (il y a des sous-menus)
    else
    { echo"<ul>";
    echo "	<ul ><a href= 'affichage.php?id_catégorie'>".$M['nom']." </a></ul>";
     
    // 3 - affichage des sous-menus
    foreach($sous_menu as $SM)
    {
    echo "		<li> <a href= 'affichage.php?id_catégorie'> ".$SM['nom']."</a></li>";
    }
     
    echo "	</ul>";
    }
    }
    ?>
    Et en photo:
    Nom : C4.png
Affichages : 815
Taille : 23,4 Ko

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    Pourquoi n'indentes-tu pas ton PHP ? C'est dur à lire.

    Essaie ceci :

    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
    <?php
     
    $menus = getMenu(0);	
     
    echo '<ul>';
     
    foreach ($menus as $menu) {
     
        echo "<li>{$menu['nom']}";
     
        $sous_menus = getMenu($menu['id']); 
     
        if ($sous_menus !== false) {
            echo '<ul>';
            foreach ($sous_menus as $sous_menu) {
                echo "<li>{$sous_menu['nom']}</li>";
            }
            echo '</ul>';
        }
     
        echo '</li>';
    }
     
    echo '</ul>';

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    En fait je n'avais pas compris ce que tu voulais dire par identer le php. Je viens donc de compredre, je suis débutant. Mais merci, le menu s'affiche correctement et le sous-menu également.
    Dernières questions concernant les liens:
    1-Est-ce que c'est id categorie qu'il faut mettre dans le href ou id_parent?
    Si oui, à quoi devrait être égale id_categorie dans le href:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ul ><a href= "affichage.php?id_catégorie=?" >'"

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    Pour afficher les articles d'un catégorie il faut plutôt passer en paramètre son ID ¨

    Ça donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<li><a href='affichage.php?id={$menu['id']}'>{$menu['nom']}</a>";
    Dans affichage.php tu as $_GET['id'] qui contient l'ID de la catégorie cliquée.

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    Ok super! Compris. Merci pour tout, et je reviendrai s'il y a des soucis plus tard

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    J'ai un dernier souci en ce qui concerne le topic. J'ai du mal à afficher mes sous-menus. Les catégories principales du menu s'affichent bien, tandis que pour le sous-menu, une seule sous catégorie s'affiche pour chaque catégorie.
    Le code HTML généré affiche bien les sous-menu, mais j'ignore si j'ai mal placé le <a href> ou le CSS:
    Voilà ce que ça donne en gros:

    Nom : C10.png
Affichages : 797
Taille : 11,1 Ko

    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
    <?php
     
     $menus = getMenu(0);	
     
     echo '<ul>';
     
     foreach ($menus as $menu) {
     
         echo "<li class='menu'><a href= 'affichage.php?id={$menu['id']}'>{$menu['nom']}</a>";
     
         $sous_menus = getMenu($menu['id']); 
     
         if ($sous_menus !== false) {
             echo '<ul>';
             foreach ($sous_menus as $sous_menu) {
                 echo "<li class='submenu'><a href= 'affichage.php?id={$menu['id']}'>{$sous_menu['nom']} </a></li>";
             }
             echo '</ul>';
         }
     
         echo '</li>';
     }
     
     echo '</ul>';
    Code CSS : 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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    nav{
      width: 100%;
      background-color: #FFA500;
      font-weight: bold;
    }
     
    nav> ul {
      margin: 0px;
      padding: 0px;
    }
     
    nav > ul::after {
      content: "";
      display: block;
      clear: both;
     
    }
     
    nav >ul > li{
    float: left;
    position: relative;
    }
     
    nav > ul > li > a {
      padding: 20px 30px;
      color: #FFF;
    }
     
    nav > ul > li:hover > a {
      padding: 15px 30px 20px 30px;
    }
     
     
    nav li{
     list-style-type: none; 
    }
    .submenu{
      display: none;
      background-color: silver;
    }
    nav input[type=checkbox]{
      display:none;
    }
    nav label{
      display:none;
    }
     
    nav a{
      display: inline-block;
      text-decoration: none;
    }
     
    nav li:hover .submenu{
    display: inline-block;
    position: absolute;
    top: 100%;
    left: 0px;
    padding: 0px;
    z-index: 1000;
    }
     
    .submenu li {
      border-bottom: 1px solid white;
    }
     
    .submenu li a{
      padding: 15px 30px;
      font-size: 13px bold;
      color: white;
      width: 270px;
    }
     
    .submenu li a:hover{
    background-color: orange;
    }
     
    .menu:hover{
      border-top: 5px solid yellow;
      background-color: silver;
    }
     
    nav input[type=checkbox]:checked ~ ul{
      display: block;
    }
    @media screen and (max-width:780px){
      .menu-mobile{
        display:block;
        color:#fff;
        background-color:orange;
        text-align:center;
        padding: 12px 0px;
     
      }
      nav ul{
        display:none;
      }
      nav ul li, nav ul li a{
        width: 100%;
        text-align:center;
     
      }
      nav ul li a, nav ul li:hover a{
        padding: 10px 0px;
      }
      nav li:hover .submenu{
        display: block;
        position: static;
      }
     
    }

    Et j'ai oublié de te demander concernant le menu. Pour récupérer l'id du Menu Accueil ou Contact, à quoi ça servira si on n'a pas de lien dans notre table?
    ==> Je veux dire par exemple pour le menu Accueil comment faire pour faire quelque chose du type <a href= "accueil.php">?

  13. #13
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    Les catégories principales du menu s'affichent bien, tandis que pour le sous-menu, une seule sous catégorie s'affiche pour chaque catégorie.
    Le code HTML généré affiche bien les sous-menu, mais j'ignore si j'ai mal placé le <a href> ou le CSS
    Je ne pourrai pas t'aider.
    Vérifie que le code HTML généré par ton PHP est correct, et si besoin poste plutôt sur le forum HTML/CSS.

    Pour récupérer l'id du Menu Accueil ou Contact, à quoi ça servira si on n'a pas de lien dans notre table?
    Ah mais je ne sais pas ce que tu as prévu
    Est-ce que ça vaut vraiment le coup de mettre des liens vers des pages ~statiques dans une BdD ?
    L'affichage dynamique des menus/catégories pourrait se limiter aux catégories d'articles (si c'est bien de cela dont il s'agit).
    Ou alors tu peux, dans ta table, ajouter une colonne "page" et y insérer le nom d'un script à inclure.
    Tout cela demande réflexion.

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    D'accord. Le sujet étant résolu, je vais poster une nouvelle discussion. Merci

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

Discussions similaires

  1. [XL-2007] Afficher toutes les catégories dans un TCD
    Par Vidjaya dans le forum Excel
    Réponses: 3
    Dernier message: 04/04/2019, 17h49
  2. [MySQL] Afficher les données d'une table dans un menu déroulant
    Par MartialBalet dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/06/2016, 16h32
  3. [2.x] Afficher les catégories dans la liste des films
    Par Elwood J. Blues dans le forum Symfony
    Réponses: 2
    Dernier message: 06/09/2011, 08h18
  4. Ordonner les catégories dans une PropertyGrid
    Par Papy214 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/02/2009, 10h27
  5. Réponses: 2
    Dernier message: 02/03/2007, 21h38

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