Пользовательский рендеринг Zend

Я пытаюсь создать пользовательскую навигацию для навигации zend, но у меня есть два вопроса:

  1. Как передать переменные в пользовательский частичный phtml, или, если это возможно?
  2. Как установить класс через все активное дерево меню?

Это мой код:

в контроллере:

$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)) { ... ... } } ..