Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Dans mon appli, j'utilise Zend_Layout. J'ai donc une page /views/layouts/layout.phtml. Ce layout récupère la vue de mon action en cours.
Dans mon action, je gère des erreurs. Et lorsqu'une erreur est détectée, je veux afficher un message (variable selon l'erreur) à l'écran à la place de la "page sans erreur". Pour se faire, j'ai une page /views/scripts/common/avertissement.phtml avec un code tout bête :
<?php if ($this->avertissement) { print "<div class='feedback'><p>" . $this->avertissement . '</p></div>'; } ?>
Donc, dans mon action, je renseigne $this->avertissement comme ceci : $this->view->avertissement = "Mon message d'erreur";
Et je l'affiche comme ça : $this->view->actionTemplate = 'scripts/common/avertissement.phtml';
Mais mon message ne s'affiche pas et la page sans erreur s'affiche.
Ma question est donc la suivante : comment faire passer mon message d'erreur à avertissement.phtml et l'afficher puisque le $this->layout()->content ne permet pas de le faire ?
Je vous remercie par avance,
Nikko
Dernière modification par Nikko (12-03-2009 10:48:18)
Hors ligne
essaye comme ça :
... le code pour la vue 'index' $this->render('index'); => le nom de ta vu pour ton action .... le code pour la vue 'averissement' .... $this->render('avertissement');
ou plus simplement dans ton layout tu met directement ton message
if (isset($this->message)) echo $this->message;
sinon regarde le Flashmessenger, affichage d'un message après redirection
Dernière modification par baboune (11-03-2009 18:34:28)
Hors ligne
Bonjour Baboune,
Merci de me consacrer du temps.
La solution que tu m'apportes est incompatible avec mon programme car $this->render permet d'afficher le contenu d'une action d'un controller. Dans mon cas, il affiche une action de mon controller saisies. Or, la page que je veux afficher (avertissement.phtml) n'a rien à voir avec ce controller. Par conséquent, Zend ne trouvera pas views/scripts/saisies/avertissement.phtml puisque celle-ci se trouve dans views/scripts/common/avertissement.phtml
J'ai donc opté pour ta deuxième solution qui est d'intégrer le message directement dans mon layout.phtml. Et ça fonctionne, je n'y avais tout simplement pas pensé.
Merci encore de m'avoir proposé cette solution.
Cordialement,
Nikko
Dernière modification par Nikko (12-03-2009 10:47:58)
Hors ligne
$this->render permet d'afficher le contenu d'une action d'un controller
non pas du tout, $this->render effectue le rendu d'une vue différente. Si ton controller s'appelle Index dans le module default, et l'action ajouter, la vue assigné a ton action est ajouter.phtml dans le répertoire de ton module, view->script->"nom du controlleur"->"action".phtml, donc view->script->index->ajouter.phtml.
Imagine que dans ma vue je fait simplement l'affichage d'une form : echo $this->form;
et que j'ai 4 controllers qui on chacun une action ajouter qui affiche simplement une form
je vais mettre cette vue ajouter.phtml dans un répertoire pas exemple "common"
dans chaque action je vais faire pour toute mes actions ajouter:
$this->render('ajouter')
et dans le bootstrap
$view = new Zend_View; $view->addScriptPath('./application/common'); $viewRenderer->setView($view) ->setViewBasePathSpec(':moduleDir/views') // facultatif => comportement par défaut ->setViewScriptPathSpec(':controller:action.:suffix')// par défaut : :controller/:action.:suffix ->setViewScriptPathNoControllerSpec(':action.:suffix'); // facultatif => comportement par défaut
comme ça toute mes actions ajouter vont utiliser le même vue ajouter qui est dans common.
sinon tu peut simplement utiliser : $this->renderScript('*******.phtml')
regarde le ViewRenderer
http://framework.zend.com/manual/fr/zen … lpers.html
Hors ligne
Pages: 1