Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai un menu simple horizontal (Home, Country, User, Admin, ...).
Quand je clic sur un titre, j'arrive dans le contrôleur qui lui correspond et l'action index (c'est le fonctionnement standard).
Je souhaite à ce moment faire apparaitre le sous menu qui lui correspond.
1)
L'idée à été de le mettre dans la fonction init() du contrôleur
public function init() { ?> <ul> <li>menu1</li> <li>menu2</li> <li>menu3</li> </ul> <?php }
Mais il apparait tout en haut de la page, avant l'affichage de la barre horizontal du menu, peut être même avant l'affichage du layout !!
2)
Autre solution, testé si on est bien dans tel ou tel contrôleur dans le layout :
if($this->_request->controller == "country") // afficher tel sous-menu
Mais dans le layout, la fonction : $this->_request->controlle ne semble pas fonctionner
Je suis à cours d'idées, qu'est ce que Zend à prévu dans ce genre de cas?
Dernière modification par maryooman (22-04-2010 09:54:29)
Hors ligne
ton controller n'est pas censé afficher du html
je crois que Zend_Navigator est fait pour gérer ce type de pb.
une piste possible qui ets tres simple, qui est valable si tu n'as pas bcp de pages: créer un array() pour chaque controller du genre
$this->view->submenu = array( array("href" => $lien1, "label" => $label1), array("href" => $lien2, "label" => $label2), );
Ensuite dans ta vue tu fais un foreach sur ce tableau pour générer ton sous-menu
Hors ligne
Source de la solution ici: http://framework.zend.com/manual/fr/zen … lpers.html
Zend_Navigation va te permettre de faire ce que tu veux et en poussant encore plus loin. Au pire, ce que tu peux faire serait de mettre une condition dans ton layout pour afficher le menu selon le controlleur courant.
Hors ligne
De mémoire, il y a une option du style "render active branch", sinon, tu fais un findOneByActive(true) pour récupérer le container et tu fais un rendu de celui-ci
Hors ligne
Merci de vos réponses,
J’ai trouvé ça pour le zend_navigator : c'est peu m'aider à démarrer : http://hienoa.net/web/2009/05/03/gettin … ple-steps/
nick : très bonne idée, mais j'ai pas mal de contrôleurs avec beaucoup d'action
probitaille : justement c'est l’option que je souhaitais, la 2eme, mais if($this->_request->controller == "country") ne fonctionne pas dans le layout (mais fonctionne dans un contrôleur)
S’il existe ce genre de fonction fonctionnant dans le layout je veux bien.
nORKy : je ne sais pas ce que c'est "render active brench", et un check rapide dans google ne m'aide pas
pour le findOneByActive(true) j'ai trouvé 2 résultats dans google : ce sujet (^^) et un lien pour celui là : http://www.zfforum.de/showthread.php?p=47336
Merci de vos précieux renseignements,
Je vais voir tout ça de mon coté.
A bientôt peut être !!
Hors ligne
Eh, google c'est bien, mais aller directement dans la doc, du ZF, c'est mieux..
Ca ma pris même pas 1min : http://framework.zend.com/manual/en/zen … ation.menu
Hors ligne
Pour récupérer le nom du controller dans ton layout, tu peux envoyer le nom dans une variable à partir de ton controller:
class IndexController extends Zend_Controller_Action { public function init() { $this->view->controller = $this->getRequest()->getControllerName(); $this->view->action = $this->getRequest()->getActionName(); }
Dans le layout:
echo $this->controller;
Hors ligne
question simplicité dans l'immédiat, c'est l'option de probitaille que j'ai utilisé
merci!!!
Hors ligne
Pages: 1