Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-03-2008 11:31:08

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

[résolu] Menu dynamique

Bonjour,

Je voudrais qu'un menu sur le coté de mon site (donc, avec une code html qui ne change jamais)
est un contenu différent en fonction du module/controller/action utilisé (j'ai une structure modulaire).

J'ai donc essayé actionStack :

Code:

// dans un module X
public function init()
    {
        //$this->_helper->actionStack('sidebar', 'Index', 'default', array('menu' => $this->getMenu()));
    }

 protected function getMenu()
    {
        $menu = array();
        $menu["/domain"] = "Index";
        $menu["/domain/test"] = "test";
        return ($menu);
    }

Le problème est que le code rentre dans une boucle infinie...
pourquoi ?

Merci

Dernière modification par nORKy (10-03-2008 16:06:10)


----
Gruiiik !

Hors ligne

 

#2 10-03-2008 13:45:00

or4cle
Membre
Date d'inscription: 18-02-2008
Messages: 70

Re: [résolu] Menu dynamique

Quand tu appelles totoAction (par ex) dans IndexController, tu passes par la méthode init() où tu ajoutes à la pile sidebarAction()
Une fois totoAction() réalisée, sidebarAction() est éxécutée donc ton (re)passe par la méthode init() de IndexController
Donc boucle infini...

Hors ligne

 

#3 10-03-2008 14:53:23

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

Re: [résolu] Menu dynamique

Ton raisonnement est bon, mais ca ne devrait pas être le cas.

Le code que je présente viens du module 'domain', controller 'config' et action 'index'.
Et tu peux voir que mon actionStack rajoute une requete puor le module 'default', controlelr 'Index' et action 'sidebar'.

Dernière modification par nORKy (10-03-2008 14:53:46)


----
Gruiiik !

Hors ligne

 

#4 10-03-2008 15:36:09

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

Re: [résolu] Menu dynamique

Je viens de faire un modification simple :

Code:

// dans un module X
public function init()
    {
          static $i = 0;
        if ($i == 0) {
        $this->_helper->actionStack('sidebar', 'Index', 'default', array('menu' => $this->getMenu()));
       }
    }

 protected function getMenu()
    {
        $menu = array();
        $menu["/domain"] = "Index";
        $menu["/domain/test"] = "test";
        return ($menu);
    }

Avec ca, plus de boucle infini, mais l'action demander est executer 2 fois ! (mon segment content est affiché en double) et la nouvelle action je demande n'est pas exécuter du tout.
Ce qui veut dire que $this->_helper->actionStack('sidebar', 'Index', 'default', array('menu' => $this->getMenu())) push de mauvaise information ??

Qu'en pensez vous ?

Dernière modification par nORKy (10-03-2008 15:54:37)


----
Gruiiik !

Hors ligne

 

#5 10-03-2008 16:05:48

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

Re: [résolu] Menu dynamique

Je me réponds à moi-meme !!!
A force de poser des code de debug dans le framework, je suis remonté jusqu'a mon plugin Auth !!
Le code de ce plugin pourtant 'connu'
voici l'original :

Code:

if (!$this->_acl->isAllowed($role, $resource, $action)) {
            if (!$this->_auth->hasIdentity()) {
                $module     = $this->_noauth['module'];
                $controller = $this->_noauth['controller'];
                $action     = $this->_noauth['action'];
            }
            else {
                $module     = $this->_noacl['module'];
                $controller = $this->_noacl['controller'];
                $action     = $this->_noacl['action'];
            }
        }
        $request->setModuleName(zz$module);
        $request->setControllerName($controller);
        $request->setActionName($action);

ET maintenant :

Code:

if (!$this->_acl->isAllowed($role, $resource, $action)) {
            if (!$this->_auth->hasIdentity()) {
                $request->setModuleName($this->_noauth['module']);
                $request->setControllerName($this->_noauth['controller']);
                $request->setActionName($this->_noauth['action']);
            }
            else {
                 $request->setModuleName($this->_noacl['module']);
                 $request->setControllerName($this->_noacl['controller']);
                 $request->setActionName($this->_noacl['action']);
            }
        }

Le Predispatch modifiait la route !
Résolu donc !!!


----
Gruiiik !

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