Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Je débute avec ZF et j'ai encore quelques petits problemes avec le fonctionnement du Zend_Layout.
J'utilise Zend_Layout avec la methode statique startMVC(), qui est lancée dans mon bootstrap.
Jusqu'a present je n'utilisais qu'un seul controlleur et toutes mes vues se trouvées dans le meme dossier.
Le rendu de mes pages s'effectuait tres bien en procedent ainsi :
Dans mon layout : app/views/layouts/layout.phtml
(nb : header.phtml et footer.phtml se trouvent dans le meme dossier que mon layout)
<!-- HEADER --> <?php echo $this->partial('header.phtml') ?> <!-- MENU --> <?php echo $this->layout()->menu; ?> <!--SIDEBAR--> <?php echo $this->layout()->sidebar; ?> <!--CONTENU--> <?php echo $this->layout()->content; ?> <!-- FOOTER --> <?php echo $this->partial('footer.phtml') ?>
Dans mon controller : app/controllers/IndexController.php
public function indexAction(){ $this->view->title = "index"; $this->render('index'); $this->render('menu','menu'); $this->render('sidebar','sidebar'); }
Mes vues index.phtml, menu.phtml et sidebar.phtml sont dans app/views/scripts/index/
Maintenant (c'est la que ca se corse) j'utilise un deuxieme controlleur et la vue info.phtml que je veux rendre avec $this->layout()->content; se trouve dans app/views/scripts/info/info.phtml
Dans mon nouveau controlleur "info" : app/controllers/InfoController.php , je ne peux plus faire appel ni au menu ni au sidebar avec $this->render('menu','menu'); et $this->render('sidebar','sidebar');
Mais j'ai le rendu de info.phtml par defaut et de header + footer
(header et footer sont dans le meme dossier que mon layout)
Qu'est ce qui ne va pas dans ma maniere de proceder ?
J'aimerai être éclairé pour pouvoir resoudre mon probleme, merci d'avance pour vos réponses
Dernière modification par _Fuse_ (21-08-2008 14:38:19)
Hors ligne
--Up--
Bonjour,
Je n'ai toujours pas trouvé de solution, et aucune reponse à ma question , mais je ne dois pas être le seul à utiliser le Zend_Layout avec plusieurs controlleurs et des vues dans differents dossier ?
Help ^^
Dernière modification par _Fuse_ (24-07-2008 13:58:37)
Hors ligne
As tu trouvé une solution à ton problème ? Peut-être que cela pourrait m'éclairer également, merci
Hors ligne
Bonjour,
Arf non je n'ai pas trouvé la solution, et c'est très génant.
J'en profite pour faire un nouvel appel : et vous comment gerez vous ce cas de figure ?
(les vacances sont la, se qui expliquerait le peut de reponse)
see y@
Hors ligne
Salut,
J'ai un problème d'accès à la doc, mais il me semble que ce que tu cherche s'appelle l'actionStack.
Cela permet de chainer tes action dans une vue (et donc ton layout) pour dire justement, ceci est le menu, controller truc action menu, ceci est les membres connecter, controller truc action OnlineMembers et ainsi de suite. je ne l'utilise pas (encore) mais il me semble que c'est ça...
Hors ligne
Tu as plusieurs solutions.
Comme me dit Asfaloth, actionStack :
public function init() { $this->_helper->actionStack('sidebar', 'nav', 'general', array( 'mod' => $this->_request->getModuleName(), 'ctrl' => $this->_request->getControllerName(), 'act' => $this->_request->getActionName(), )); public infoAction() { }
Lorsque tu apelles infoAction, ca passe d'abord par init, et l'actionStack rajoute dans la pile d'action, une nouvelle action.
Ici, ca va executer /general/nav/sidebar
Les paramètres que je passe sont utilisés uniquement pour savoir quel lien est 'actif'.
Mais tu peux faire comme tu veux, tu peux carément passer le menu que tu veux générer par exemple
Dans ton action sidebar tu places ca :
$this->render(null, 'sidebar');
C'est a dire qu'il va faire le rendu de la vue qui lui correspond (nav/sidebar.phtml) et le placé dans le segment 'sidebar'
Ainsi, dans ton layout :
<?= $this->layout()->sidebar;?>
Sinon, tu as d'autres solution avec l'aide de vu action
dans ton layout.phtml
<?= $this->action('sidebar', 'nav', 'general')?>
Mais attention, le comportement d'action est bizarre. Bien que tu executes general/nav/sidebar, ca sera dans le context de requète initial (info).
En gros, par défaut, general/nav/sidebar va s'executer, mais le viewrenderer va fonctionner comme si tu étais toujours dans infoAction, et donc, tu vas faire le rendu de sidebar.phtml mais dans le répertoites des vues qui correspond à celle d'info.
Ca peut être interessant si tu places des sidebar.phtml dans tous tes répertoires de vues.
A toi te tester et voir ce qui te convient le mieux.
Hors ligne
Salut,
merci beaucoup pour ces réponses.
Je test des que possible (je suis obligé de finir des priorités sur mon projet, et comme tout projet, ce qui manque le plus c'est du temps )
Ensuite je posterais la solution que j'ai retenu.
++
Dernière modification par _Fuse_ (08-08-2008 10:50:41)
Hors ligne
Re,
Ayé, ca marche !
J'ai essayé plusieurs choses avant de trouver ($view->setScriptPath('/chemin/des/vues'); ou $layout->setScriptPath('/chemin/des/layout');...
Apres j'ai utilisé $this->_helper->actionStack() (merci pour l'info ), ca ne marché toujours pas, j'ai donc crée une action correspondant a la vue que je voulais rendre avec l'appel à la vue.
Comme ceci:
public function sidebarAction(){
$this->render('sidebar', 'sidebar');
}
et dans l'init de mon controlleur :
$this->_helper->actionStack('sidebar', 'chemin', 'des', 'vues');
Voila, maintenant ca roule, et je suis bien content
++
Hors ligne
Pages: 1