Я пытаюсь создать пользовательскую навигацию для навигации zend, но у меня есть два вопроса:
Это мой код:
в контроллере:
$config = new Zend_Config($menu); $nav = new Zend_Navigation(); $nav->addPages($config); $this->view->nav = $nav; в представлении:
 <?php echo $this->navigation($this->nav)->menu()->setPartial('menu.phtml')->render(); ?> 
и мои частичные:
 <?php function genMenu($container) { foreach ($container as $page) { echo '<li>'; $href = $page->uri; $target = '_self'; echo '<a href="' . $href . '" target="' . $target . '">' . $page->label . '</a>'; if (!empty($page->pages)) { echo '<ul>'; genMenu($page->pages); echo '</ul>'; } echo '</li>'; } } echo '<ul>'; genMenu($this->container); echo '</ul>'; 
Спасибо всем заранее!
 echo $this->navigation($this->nav)->menu()->setPartial('menu.phtml')->render(); ?> 
не совсем правильно, у вас есть правильная идея, но попробуйте
 //This will pass a valid container to your partial with the $this->nav echo $this->navigation()->menu()->renderPartial($this->nav,'menu.phtml') ?> 
вот api:
 public function renderPartial(Zend_Navigation_Container $container = null, $partial = null) 
также этот бит выглядит немного неуклюжим:
 $config = new Zend_Config($menu); $nav = new Zend_Navigation(); $nav->addPages($config); $this->view->nav = $nav; 
Я не думаю, что -> addPages () – это то, что вы хотите здесь, я думаю, что вам нужно:
 //where $menu is the container and is config(.ini) object not .xml //for xml use Zend_Config_Xml or Zend_Config_Json for JSON $config = new Zend_Config($menu); $nav = new Zend_Navigation($config); //assign the container to the view $this->view->nav = $nav; 
См. ЗДЕСЬ
Добавьте эту строку в действительный ACL, если используете ACL
 if ($this->navigation()->accept($page)) 
Его результат
 ... foreach ( $iterator as $page ) { //VALID ACL if ($this->navigation()->accept($page)) { ... ... } } ..