PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 26-11-2013 12:47:50

caema
Membre
Inscription : 26-11-2013
Messages : 5

Affichage d'un sous menu dynamique: problème conception d'un foreach?

Bonjour à tous,

Pour les besoin d'une formation, j'ai réalisé un site en MVC et POO.
Je suis en train d'essayer d'améliorer ce site, afin de bosser un peu mes compétences, et je commence à sécher en ce qui concerne l'affichage de mon sous menu...

Voici le menu, en statique, tel que je souhaite le réaliser (ce code est fonctionnel):


<div class="navbar-collapse collapse">
     <ul class="nav navbar-nav">
         <li class="active"><a href="#">Item 1</a></li>
         <li><a href="#">Item 2</a></li>
         <!-- Sub menu -->
    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Item 3 <b class="caret"></b></a>
                          <ul class="dropdown-menu">
                          <li><a href="#">Submenu 1</a></li>
              <li><a href="#">Submenu 2</a></li>
              <li><a href="#">Submenu 3</a></li>
         </ul>
              </li>
         <li><a href="#">Item 4</a></li>
      /ul>
</div>
 

Ensuite, voilà comment j'ai imaginé rendre ce menu dynamique:

Au niveau de ma base de données, j'ai un champ id_post, qui est en clé étrangère et qui référence le champ id de la table posts. Ainsi, les élément qui correspondent bien au menu ont un id_posts null, et les élément correspondant au sous menu ont un id_posts valant 3, liant donc à l'id 3 de ma table.

Ensuite, dans le fichier qui doit rendre mon menu, actuellement j'ai ceci:


<ul class="nav navbar-nav">
    <!-- MENU -->
    <?php $pagesMenu = $this->request('Pages','getMenu'); ?>
    <?php foreach($pagesMenu as $p): ?>
           <li><a href="<?php echo Router::url('pages/view/id:'.$p->id.'/slug:'.$p->slug); ?>" title="<?php echo $p->name; ?>"><?php echo $p->name; ?></a></li>
    <?php endforeach; ?>
                       
     <!-- SOUS_MENU -->
     <?php $pagesMenu = $this->request('Pages','getSubMenu'); ?>
     <?php foreach($pagesMenu as $p): ?>
             <li class="dropdown">
                   <a class="dropdown-toggle" data-toggle="dropdown" href="<?php echo Router::url('pages/view/id:'.$p->id.'/slug:'.$p->slug); ?>" title="<?php echo $p->name; ?>"><?php echo $p->name; ?></a>
                   <ul class="dropdown-menu">
                         <li><a href="<?php echo Router::url('pages/view/id:'.$p->id.'/slug:'.$p->slug); ?>"><?php echo $p->name; ?></a></li>
                    </ul>
              </li>
      <?php endforeach; ?>
</ul>
 

Le résultat: tous les éléments correspondant au menu apparaissent, et à la suite, j'ai les éléments de mon sous-menu.
C'est déjà pas mal, ça prouve que mes requêtes sql sont correctes.

Le soucis, c'est que je souhaite que les éléments de mon sous-menu s'affichent sous l’élément de menu item 3... et ça n'est pas le cas.

Je comprends bien que le soucis se situe au niveau de mes boucles foreach, je suppose d'ailleurs (arrêter moi si je me trompe), que la boucle foreach qui traite le sous menu doit être imbriquée dans la boucle foreach de traitement du menu mais je n'arrive pas à la construire correctement, pour tout dire je suis un peu perdue...
Je planche sur ce soucis depuis quelques jours, sans succès..

J'espère de tout cœur avoir été suffisamment claire, si ça n'est pas le cas, n'hésitez pas à demander, en tout cas j'ai besoin d'aide, car à force... j'ai juste envie de prendre mon PC et de le balancer par la fenêtre lol.

D'avance merci!

Hors ligne

#2 26-11-2013 21:50:38

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Affichage d'un sous menu dynamique: problème conception d'un foreach?

Saluton,
Je n'ai pas le temps d'approfondir mais j'imagine que tu dois n'avoir qu'une seule requête en mettant les tables en jointure pour n'avoir qu'un seul résultat à parcourir dans ton foreach.
Cela ramène ensuite ton problème à celui de Darkangel, gestion de rupture dans un parcours séquentiel (foreach).


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 27-11-2013 09:48:58

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Affichage d'un sous menu dynamique: problème conception d'un foreach?

Bonjour

Au niveau de ma base de données, j'ai un champ id_post, qui est en clé étrangère et qui référence le champ id de la table posts. Ainsi, les élément qui correspondent bien au menu ont un id_posts null, et les élément correspondant au sous menu ont un id_posts valant 3, liant donc à l'id 3 de ma table.

Vous avez visiblement un problème au niveau conceptuel de vos données. Comment un post peut-il appartenir à une référence menu inexistante? (effet null sur la jointure externe). Vous devez à mon avis avoir posé une contrainte de clé étrangère avec une BD en MyISAM pour que le contrôle du moteur sur la contrainte ne soit pas intervenu.
Je vous suggère de revoir votre copie avant d'aller plus loin, surtout qu'il s'agit d'un cas d'école wink

++

Dernière modification par Jc (27-11-2013 09:51:26)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums