Я пытаюсь создать пользовательскую навигацию для навигации 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)) { ... ... } } ..