Affichage d'un sous menu dynamique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage d'un sous menu dynamique

Re: Affichage d'un sous menu dynamique

par xTG » 26 nov. 2013, 22:11

Ce n'est pas ce qui me choquerai au premier abord. Ce qui diffère surtout c'est que tu utilises un pattern MVC.

Ce qu'il faut donc c'est que ton Modèle renvoie le résultat de la requête.
Que le Contrôleur passe l'array retourné par le Modèle à la vue.
Et que la Vue affiche le menu (la fonction affiche_menu en gros).

Et si tu ne veux pas passer par une telle fonction tu peux tout simplement réorganiser les données dès le contrôleur pour envoyer à la Vue un array trié et distinguant le menu du sous-menu (afin de fermer les balises au bon endroit).

Re: Affichage d'un sous menu dynamique

par caema » 26 nov. 2013, 19:38

Super,

Je tente de mettre cela en place, puis je reviens ici, soit pour d'autres questions, soit pour passer en résolu ;-)
Mais je risque d'avoir un peu de mal à adapter: mon site est en POO, et l'exemple donné ici est en PHP procédural si je ne me trompe?

Merci

Re: Affichage d'un sous menu dynamique

par xTG » 26 nov. 2013, 19:28

J'allais partir dans un très long post et puis je suis tombé sur ça :
http://www.coinduwebmaster.com/menu-arb ... ve-php/89/

Cela semble totalement convenir à ce que tu souhaites et c'est très bien expliqué. :)

Re: Affichage d'un sous menu dynamique

par caema » 26 nov. 2013, 15:18

En effet, j'ai deux requêtes, que voici:
function getMenu(){
    	$this->loadModel('Post');
    	return $this->Post->find(array(
    		'conditions' => 'online = 1 AND type = "page" AND id_posts IS NULL'
   		));
	}

function getSubMenu(){
    $this->loadModel('Post');
    return $this->Post->find(array(
        'conditions' => 'online = 1 AND type = "page" AND id_posts IS NOT NULL'
    ));
Je suis paumée, je pensais que 2 requêtes étaient nécessaires étant donné que pour les 2 cas, ma condition est différente...

Re: Affichage d'un sous menu dynamique

par xTG » 26 nov. 2013, 14:30

Il te faut une seule requête, à priori tu en as deux là non ? (mais en même temps si tu nous montres que la vue on peut pas en faire grand chose :P)

Et une boucle sur cette requête, si l'id est null c'est un menu, si l'id est non null c'est un sous-menu => if..else
Et avec une requête qui contient le bon ORDER BY tu auras ton menu dans le bon ordre.

Affichage d'un sous menu dynamique

par caema » 26 nov. 2013, 11:30

Bonjour à tous,

Pour les besoin d'une formation, j'ai réalisé un site en MVC.
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 ce que j'ai réalisé:

Au niveau de ma base de données, j'ai ajouté 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 mon layout par défaut, qui est censé afficher mon menu et mon sous-menu actuellement j'ai:
<!-- 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; ?>
Ma requête sql est donc bonne, et je sais que c'est au niveau de mes foreach qu'il y a un soucis.
Mais je n'arrive pas à solutionner cela, et indiquer que lorsque id_posts = 3, il faut afficher le sous menu...

Voilà, j'espère avoir été claire dans mes explications, je débute en POO et avec ce soucis, je remarque que j'ai sans doute "louper" quelques trucs...

Une aide et/ou des sources pour m'aider à comprendre sont les bienvenus.

D'avance merci à vous!