Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-01-2009 18:18:49

jean
Membre
Date d'inscription: 25-08-2008
Messages: 107

[Résolu] Afficher le module courant dans les vues et layouts

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 :

Code:

<?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

Code:

    
$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

Code:

    
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

 

#2 29-01-2009 18:41:12

jenreve
Nouveau membre
Date d'inscription: 22-12-2008
Messages: 3

Re: [Résolu] Afficher le module courant dans les vues et layouts

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

Code:

 
            $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
            if (null === $viewRenderer->view) {
                $viewRenderer->initView();
            }
            $view = $viewRenderer->view;

Hors ligne

 

#3 29-01-2009 20:57:33

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu] Afficher le module courant dans les vues et layouts

Qui plus est, en postdispatch ton action est déjà fini smile


----
Gruiiik !

Hors ligne

 

#4 30-01-2009 09:08:35

jean
Membre
Date d'inscription: 25-08-2008
Messages: 107

Re: [Résolu] Afficher le module courant dans les vues et layouts

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 ?

Code:

<?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

 

#5 30-01-2009 09:25:20

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu] Afficher le module courant dans les vues et layouts

Hello,

Enlèves le $this:

Code:

...
$view = $viewRenderer->view;
  
$view->moduleactif = $request->getModuleName(); //<- sans le $this
...

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#6 30-01-2009 09:45:21

jean
Membre
Date d'inscription: 25-08-2008
Messages: 107

Re: [Résolu] Afficher le module courant dans les vues et layouts

Désolé,  $this->moduleactif ne récupère toujours rien dans la vue...

Code:

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

 

#7 30-01-2009 10:10:00

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Résolu] Afficher le module courant dans les vues et layouts

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)


----
Gruiiik !

Hors ligne

 

#8 30-01-2009 13:54:41

jean
Membre
Date d'inscription: 25-08-2008
Messages: 107

Re: [Résolu] Afficher le module courant dans les vues et layouts

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 :

Code:

<?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

 

#9 17-04-2009 17:36:24

forevermoon
Membre
Date d'inscription: 10-04-2009
Messages: 45

Re: [Résolu] Afficher le module courant dans les vues et layouts

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

 

#10 17-04-2009 23:49:10

forevermoon
Membre
Date d'inscription: 10-04-2009
Messages: 45

Re: [Résolu] Afficher le module courant dans les vues et layouts

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 ...  ?

Code:

$config = new Zend_Config_Ini('./application/config/layout.ini', '$modulName');

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages