Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir,
Je souhaite récupérer le nom du module courant dans le partial d'un layout. Le nom du module me permettra de piloter l'affichage d'onglets.
Pour cela, j'ai créé un plugin :
<?php class My_Controller_Plugin_Module extends Zend_Controller_Plugin_Abstract { public function postDispatch(Zend_Controller_Request_Abstract $request) { // Récupère le module courant et l'affecte à la vue $this->view->moduleactif = $request->getModuleName(); } } ?>
... que j'appelle depuis le bootstrap
$frontController->registerPlugin(new My_Controller_Plugin_Acl()) ->registerPlugin(new My_Controller_Plugin_Module()); ?>
Dans dans le partial du layout je ne récupère rien en faisant
echo $this->moduleactif ; ?>
Mes questions :
- est-ce que c'est la "bonne" façon pour le faire ?
- pourquoi la valeur passée à la vue n'est transmise dans mon partial ?
Jean
Dernière modification par jean (02-02-2009 09:08:42)
Hors ligne
Bonsoir,
la propriété view n'est pas disponible dans les plugins.
il faut pour cela aller chercher le viewrenderer et la vue (qui doit être initialisée dedans). S'il elle n'y est pas on l'initialise
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); if (null === $viewRenderer->view) { $viewRenderer->initView(); } $view = $viewRenderer->view;
Hors ligne
Qui plus est, en postdispatch ton action est déjà fini
Hors ligne
J'ai modifié mon plugin suivant vos conseils, mais je ne récupère toujours rien au niveau de la vue.
=> depuis le plugin, l'écho suivant fonctionne :
echo "Depuis Controller Plugin Module = " . $this->view->moduleactif . "#";
=> ... mais dans la vue, $this->moduleactif ne récupère toujours rien....
J'ai utilisé un plugin, mais peut être qu'il y a plus simple pour faire ce que je souhaite : piloter l'affichage HTML d'onglets en fonction du module.
Any idea ?
<?php class My_Controller_Plugin_Module extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { // Récupère le module courant et l'affecte à la vue $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); if (null === $viewRenderer->view) { $viewRenderer->initView(); } $view = $viewRenderer->view; $this->view->moduleactif = $request->getModuleName(); echo "Depuis Controller Plugin Module = " . $this->view->moduleactif . "#"; $this->view->moduleactif = $request->getModuleName(); } } ?>
Dernière modification par jean (30-01-2009 09:52:23)
Hors ligne
Hello,
Enlèves le $this:
... $view = $viewRenderer->view; $view->moduleactif = $request->getModuleName(); //<- sans le $this ...
A+
Hors ligne
Désolé, $this->moduleactif ne récupère toujours rien dans la vue...
public function preDispatch(Zend_Controller_Request_Abstract $request) { $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); if (null === $viewRenderer->view) { $viewRenderer->initView(); } $view = $viewRenderer->view; $view->moduleactif = $request->getModuleName(); echo "Depuis Controller Plugin Module = " . $view->moduleactif . "#"; //$this->view->moduleactif = $view->moduleactif ; } }
Dernière modification par jean (30-01-2009 09:46:20)
Hors ligne
Est-ce que tu réinitialises pas la vue (avec un new View) qqpart ou qqchose du genre ?
Car, j'utilise ce même principe et je n'ai pas de problèmes
Par contre, moi, je ne fais pas de initView.
Je fais dans un __construct : $viewrender->init()
Je ne sais pas ce que ca change (et j'ai pas envie de regarder dans le source maintenant)
Hors ligne
Ouf, tout fonctionne.
Depuis le plugin, j'initialise des variables (module actif, controller actif...) utilisable dans toutes les VUES et dans tous les LAYOUTS.
Sinon, le code du plugin qui fonctionne :
<?php class My_Controller_Plugin_ModuleSetup extends Zend_Controller_Plugin_Abstract { // Récupère le module, controller et action courant et l'affecte à toutes les vues et tous les layouts public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { // $request n'est pas utilisé mais mais il est demandé par l'héritage $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); // Variables utilisables dans les VUES // ex : appel par $this->moduleactif $viewRenderer->view->moduleactif = $request->getModuleName(); $viewRenderer->view->contolleractif = $request->getControllerName(); $viewRenderer->view->actionactif = $request->getActionName(); // Variables utilisables dans les LAYOUTS // ex: appel par $this->layout()->moduleactif $layout = Zend_Layout::getMvcInstance(); $layout->moduleactif = $request->getModuleName(); $layout->contolleractif = $request->getControllerName(); $layout->actionactif = $request->getActionName(); } } ?> ... et dans le bootstrap : $frontController->registerPlugin( new My_Controller_Plugin_ModuleSetup());
... encore Merci à tous ceux qui m'ont mis sur la bonne piste !
Dernière modification par jean (02-02-2009 16:35:21)
Hors ligne
j'ai une errreur
Strict Standards: Creating default object from empty value in D:\workspace\library\My\Controller\Plugin\ModuleSetup.php on line 14
Fatal error: Call to undefined method stdClass::getScriptPaths() in D:\workspace\library\Zend\Controller\Action\Helper\ViewRenderer.php on line 489
Dernière modification par forevermoon (17-04-2009 17:41:41)
Hors ligne
ok j'arrive a récupérer le nom du modul mais si je veux le recuperer dans le bootstrap pour définir le repertoire des layout ... ?
$config = new Zend_Config_Ini('./application/config/layout.ini', '$modulName');
Hors ligne
Pages: 1