Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-11-2012 11:19:39

Shimrra
Membre
Date d'inscription: 05-10-2012
Messages: 19

[Zend_Controller_Action_Helper_ActionStack][1.12.0] Depuis une vue

Bonjour,

Je suis coincé depuis plus d'une heure et demie sur un soucis qui me laisse sans voix.

J'ai réaliser un controller gérant l'affichage du menu de gauche sur mon site. Donc en fonction de si on est sur une page d'admin ou public ce n'est pas le même menu.

J'ai donc réaliser via un if et un actionstack l'appel de l'action affichant le menu correct :

Code:

 [lang=php]
class MenuController extends SurcoucheZend_Controller_Action{
    
    /**
     * Permet d'afficher le menu d'admin ou public en fonction du controller demandé
     * @return: void
     **/
    public function afficherAction(){
        
        if($this->onAdmin()){
            $this->_helper->actionStack("admin", "menu", "default", array());
        }else{
            $this->_helper->actionStack("public", "menu", "default", array());
        }
    }
    
    /**
     * Permet d'afficher le menu d'admin
     * @return: void
     **/
    public function adminAction(){
        $this->_helper->viewRenderer->setResponseSegment("menu");
    }
    
    /**
     * Permet d'afficher le menu public
     * @return: void
     **/
    public function publicAction(){
        $this->_helper->viewRenderer->setResponseSegment("menu");
    }
}

Si j'appelle directement dans l'url menu/afficher, tout fonctionne comme sur des roulettes. Le soucis c'est que j'appelle cette action dans mon layout :

Code:

 [lang=php]
<?php 
    //on affiche le menu si c'est demandé
    if(Zend_Registry::isRegistered('showmenu') && !Zend_Registry::get('showmenu')){
        echo $this->action('afficher', 'menu');
    }
?>

Et dans ce cas là, il rentre bien dans l'action "afficher", mais il ne suit pas les actions de l'actionstack alors que j'ai vérifié, elles sont bien enregistré dans Zend_Registry. Et je n'ai aucun message d'erreur ...

Y a un truc dans zend qui fait qu'il ne peut pas exécuter actionstack si l'action initiale provient d'une demande d'une vue ? Ou je sais pas quoi ...

Merci d'avance si vous avez des idées.

Dernière modification par Shimrra (22-11-2012 14:14:58)

Hors ligne

 

#2 22-11-2012 13:05:20

us2rn4m2
Membre
Date d'inscription: 07-05-2011
Messages: 104

Re: [Zend_Controller_Action_Helper_ActionStack][1.12.0] Depuis une vue

Bonjour,

Je ne fait que passer car je n'ai encore jamais utilise l'actionStack + setresponseSegment mais y'aurait pas une erreur dans cette instruction

Code:

[lang=php]
<?php 
    //on affiche le menu si c'est demandé
    if(Zend_Registry::isRegistered('showmenu') && !Zend_Registry::get('showmenu')){
        echo $this->action('afficher', 'menu');
    }
?>

En fait tu demandes au registry si la clé 'showmenu' existe et toute suite à coté tu lui demande si elle n'existe pas. (ou du moins qu'elle renvoye false alors qu'on s'attendrait plutot a ce qu'elle renvoye true)

Dernière modification par us2rn4m2 (22-11-2012 13:58:39)

Hors ligne

 

#3 22-11-2012 13:07:11

Shimrra
Membre
Date d'inscription: 05-10-2012
Messages: 19

Re: [Zend_Controller_Action_Helper_ActionStack][1.12.0] Depuis une vue

Non, je demande en premier temps si elle existe et ensuite je demande si sa valeur est true ou false. showmenu = true signifie qu'on doit cacher le menu donc avec le ! devant ça passe à false et ça n'appellera pas l'action du menu.

Hors ligne

 

#4 22-11-2012 14:24:08

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [Zend_Controller_Action_Helper_ActionStack][1.12.0] Depuis une vue

Une simple question, dont la réponse ne résoudra pas ton problème mais qui m'intrigue, qu'est ce qui diffère entre ton menu public et ton menu admin ?

Hors ligne

 

#5 22-11-2012 15:12:30

Shimrra
Membre
Date d'inscription: 05-10-2012
Messages: 19

Re: [Zend_Controller_Action_Helper_ActionStack][1.12.0] Depuis une vue

C'est un site de e-commerce. Le menu public affichera un moyen de trier les produits alors que le menu d'admin donne accès a des liens pour valider des commandes etc. C'est un projet scolaire.

Ma dernière solution c'est que mes fonctions publicAction et adminAction deviennent de simple fonction que j'appelle via $this->public(), que je modifie ma vue afficher.phtml pour qu'elle s'adapte en fonction de quelle fonction appelée et les deux fonctions publicAction et adminAction utiliseraient directement la vue d'afficher ... mais je trouve ça "crade"



SOLUTION (TEMPORAIRE ?) : Une solution qui fonctionne je sais pas si c'est la mieux, si quelqu'un a un moyen de résoudre le soucis d'une meilleure façon je prends.

Ma solution :
Mon layout demande à charger l'action "afficher" du controller "menu".
Dans l'action "afficher", je teste si on est dans une page d'admin ou non. J'attribue a une variable la chaîne "admin" si on est dans une page d'admin ou bien public pour une page public, j'assigne ensuite cette variable à la vue de l'action "afficher".
Dans la vue de l'action "afficher" du controller "menu", je demande à appeler l'action "admin" du controller "menu" si la variable venant du controller vaux "admin" si non j'appelle l'action "public" du controller "menu".

Dernière modification par Shimrra (22-11-2012 16:28:48)

Hors ligne

 

#6 23-11-2012 13:15:24

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [Zend_Controller_Action_Helper_ActionStack][1.12.0] Depuis une vue

Je pense que tu te trompe dans ta façon de penser la chose. Ce sont tes ACL qui gère ce que l'utilisateur peut voir en fonction de son role, tu n'a normalement pas besoin de te prendre la tete avec tout ça.
Il est cependant possible que j'ai raté une subtilité dans ton besoin.

Hors ligne

 

#7 23-11-2012 16:42:30

Shimrra
Membre
Date d'inscription: 05-10-2012
Messages: 19

Re: [Zend_Controller_Action_Helper_ActionStack][1.12.0] Depuis une vue

Si je me souviens bien, ACL permet de dire qu'en fonction des droits de l'utilisateur, il peut ou non voir certaines pages. Or dans mon cas c'est en fonction de si on est admin ou non, le contenu change mais c'est tjrs la même page.

Dernière modification par Shimrra (23-11-2012 16:43:49)

Hors ligne

 

#8 25-11-2012 23:20:33

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [Zend_Controller_Action_Helper_ActionStack][1.12.0] Depuis une vue

Tu veux afficher un menu, tes ACL permettent de définir si tu as accès à tel ou tel page, si tu n'as pas accès les liens ne s'affiche pas !

Hors ligne

 

#9 26-11-2012 16:04:39

Shimrra
Membre
Date d'inscription: 05-10-2012
Messages: 19

Re: [Zend_Controller_Action_Helper_ActionStack][1.12.0] Depuis une vue

J'étudirai la question s'il me reste du temps pour mon projet (j'ai du retard pour le moment, donc si ça fonctionne c'est le principal ^^) merci pour la suggestion.

En tout cas pour le problème principal du sujet j'ai pas avancé, toujours ma solution temporaire qui risque d'être la version définitive ^^"

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