Zend Navigation Пользовательский рендеринг - PullRequest
3 голосов
/ 13 февраля 2012

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

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

Это мой код:

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

$config = new Zend_Config($menu);
$nav = new Zend_Navigation();
$nav->addPages($config);
$this->view->nav = $nav;

inпредставление:

<?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>';

Спасибо всем заранее!

Ответы [ 2 ]

4 голосов
/ 13 февраля 2012
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;
2 голосов
/ 13 февраля 2012

См. ЗДЕСЬ

Добавьте эту строку в действительный ACL, если используете ACL

if ($this->navigation()->accept($page))

Его результат

...    
    foreach ( $iterator as $page ) {
        //VALID ACL
        if ($this->navigation()->accept($page)) {
            ...
            ...
        }
    }
    ..
...