2010-04-02 3 views
1

J'ai eu du mal avec Zend_Navigation pendant tout le week-end, et maintenant j'ai un autre problème qui, selon moi, a été la cause de beaucoup de mes problèmes. J'essaie d'ajouter Zend_Navigation à une ancienne application Zend Framework 1.7.6, j'ai mis à jour la bibliothèque Zend vers la version 1.9.0 et mis à jour le bootstrap pour permettre cette mise à jour de la bibliothèque.Ajouter Zend_Navigation à la vue avec l'ancien bootstrap

Le problème est que je ne sais pas comment, et les exemples montrent la nouvelle méthode d'amorçage de la façon d'ajouter l'objet de navigation à la vue, je l'ai essayé ceci:

//initialise the application layouts with the MVC helpers 
$layout = Zend_Layout::startMvc(array('layoutPath' => '../application/layouts')); 

$view = $layout->getView(); 
$configNav = new Zend_Config_Xml('../application/config/navigation.xml', 'navigation'); 
$navigation = new Zend_Navigation($configNav); 
$view->navigation($navigation); 
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); 
$viewRenderer->setView($view); 

Cela semble exécuter correctement, mais quand je vais utiliser l'aide d'affichage de fil d'ariane dans ma mise en page, il erreurs avec: Strict Standards: Création d'un objet par défaut à partir de la valeur vide dans C: \ www \ moobia \ development \ website \ application \ modules \ employeurs \ controllers \ IndexController.php sur la ligne 27

Ceci est dû au code suivant dans init () fonction de mon contrôleur. Je crois que c'est parce que l'objet Zend_Navigation n'est pas dans la vue.

Je regarderais migrer le bootstrap à la méthode actuelle, mais actuellement je manque de temps pour une version.

Merci,

Grant

Répondre

2

Vous devez d'abord travailler si vos soupçons que Zend_Navigation est pas dans la vue est correcte. Le moyen le plus simple de le faire serait d'ajouter:

var_dump($this->view->navigation());exit; 

à votre contrôleur init(). Cela devrait retourner l'objet Zend_Navigation s'il est présent. Si ce n'est pas le cas, un autre moyen de fournir l'objet Zend_Navigation consiste à utiliser le registre, ce qui peut être plus facile. Pour ce faire, vous souhaitez supprimer la vue des choses de votre bootstrap et juste faire ceci:

$configNav = new Zend_Config_Xml('../application/config/navigation.xml', 'navigation'); 
$navigation = new Zend_Navigation($configNav); 
Zend_Registry::set('Zend_Navigation', $navigation); 

vos trucs init() contrôleur demeurerait le même que l'objet de vue se penchera dans le registre si elle n'a pas déjà avoir un objet Zend Navigation. Cependant, je ne suis pas sûr que le code init() de votre contrôleur fonctionnera comme vous le souhaitez. Je ne pense pas que findByUri() fonctionnera sur les pages Mvc (mais je peux me tromper), et à partir de votre question précédente, il semble que la plupart des pages de votre fichier XML sont en Mvc. La classe Mvc a une propriété 'href' qui semble être l'équivalent. Si votre fichier XML contient les deux types de page, vous devrez peut-être vérifier les deux, donc je suggère quelque chose comme ceci:

$uri = $this->_request->getPathInfo(); 
if (($activeNav = $this->view->navigation()->findByHref($uri)) !== null) { 
    $activeNav->active = true; 
} else if (($activeNav = $this->view->navigation()->findByUri($uri)) !== null) { 
    $activeNav->active = true; 
} 
+0

@Tim Fountain, Monsieur, vous êtes une star !!! Deux fois en un jour MERCI! Je vous dis que si ce n'était pas pour ce site et un seau de café, je suis sûr que je vais avoir une dépression nerveuse maintenant !! encore merci beaucoup! –

Questions connexes