2010-12-08 20 views
1

J'ai des pages dans mon application qui composent l'arborescence de navigation. Je voudrais insérer dynamiquement des pages dans ma navigation en utilisant les valeurs de la requête. J'ai déjà la logique pour trouver la page et ensuite appeler la méthode addPage() dessus. Ce que je cherche, c'est comment passer facilement les valeurs Zend_Controller_Request à Zend_Navigation_Page::factory() afin que je puisse ajouter cette page. Peut-être même écrit en tant que plugin?Créer une instance Zend_Navigation_Page_Mvc d'un Zend_Controller_Request


Solution

angelp a le plus proche, alors je lui donne le crédit, mais voici ma solution:

$request = $this->getRequest(); 
if ($page = $this->view->siteNav->findBy('id', $page_id)) { 
    $page->addPage(Zend_Navigation_Page::factory($request->getParams()) 
      ->setParams($request->getParams()) 
      ->setLabel($this->view->title) 
      ->setVisible(false)); 
} 

Ce code est exécuté à partir d'une action du contrôleur. $this->view->siteNav est une instance de Zend_Navigation que j'ai dans la vue. getParams() de l'instance Zend_Controller_Request est facilement passé à Zend_Navigation_Page::factory(), puis la méthode setParams() de l'instance Zend_Navigation_Page_Mvc.

Répondre

1

je des ressources limitées en ce moment donc je ne peux pas vraiment vérifier ma suggestion, mais si vous êtes en vous contrôleur, pourquoi ne pas vous ..

 

$controller = $this->_request->getControllerName(); 
$action = $this->_request->getActionName(); 

$page = new Zend_Navigation_Page(array(
        'label' => "Sonny's Page", 
        'controller' => $controller, 
        'action' => $action 
)); 
 

Peut-être que vous pourriez l'utiliser comme un plug-in de sorte que vous surchargez votre vue? Et puis ajouter à votre conteneur de navigation?

Cheers,
Ange

+0

Je suis conscient de la façon de construire un 'Zend_Navigation_Page' en utilisant un tableau clé => valeur construit manuellement, mais j'espérais qu'il y avait un raccourci en utilisant certaines méthodes du' Zend_Controller_Request' – Sonny

0

Pourquoi ne pas stocker l'instance dans Zend_Registry puis dans un postDispatch soit d'un plug-in, bootstrap de module ou contrôleur d'action ajouter les pages à la navigation d'origine?

+0

Je ne suis pas votre réponse.J'ai l'instance 'Zend_Navigation' définie dans une variable de vue. Je n'ai pas de problème avec cette partie. Je veux ajouter les pages dans des actions de contrôleur spécifiques, et je sais déjà comment accomplir cette partie aussi bien. Ce que je ne sais pas, c'est comment créer simplement une instance 'Zend_Navigation_Page_Mvc' en utilisant le' Zend_Controller_Request'. – Sonny

1

Puisque nous ne savons pas le code que vous avez déjà écrit, je ne devine ...

Vous devez:

  • récupérer le Zend_Navigation réel récipient utilisé dans navigation() l'aide de vue
  • créer nouvelle instance Zend_Navigation_Page de tableau de données extraites de la demande
  • ajouter la page au conteneur
  • affecter le nouveau conteneur à l'aide de navigation

Cela devrait être facile. Le reste, vous devez savoir:

  • comment écrire le plugin de contrôleur avec la méthode preDispatch et mettre le là-haut,
  • comment accéder à l'instance de vue en cours dans ce plug-in (à partir du moteur de rendu de vue ou de ressource d'application/bootstrap)

Ensuite, dans le plugin, vous opérez sur l'assistant d'affichage de navigation comme d'habitude dans la vue.

Hope this clarifié certaines choses.

+0

De la liste "Vous devez:" J'ai les étapes 1, 3 et 4 tout a fonctionné. Il espérait un moyen simple de créer une instance 'Zend_Navigation_Page' à partir des méthodes de l'instance' Zend_Controller_Request' disponible dans une action du contrôleur en appelant '$ this-> getRequest()'. – Sonny

+0

@Sonny AngelP Décrit l'étape 2 dans [sa réponse] (http://stackoverflow.com/questions/4389358/create-a-zend-navigation-page-mvc-instance-from-a-zend-controller-request/4391789 # 4391789). – takeshin