Визуализация дочерних элементов активной ветви с помощью помощника Zend Navigation view

#zend-framework #zend-navigation

#zend-framework #zend-навигация

Вопрос:

То, что я спрашиваю, похоже на эту проблему, которая до сих пор не решена.

Я пытаюсь создать хорошее решение для подменю, но, похоже, я не могу заставить Zend_View_Helper_Navigation_Menu работать со мной.

Вот моя конфигурация навигации XML:

 <configdata>
    <nav>
        <index>
            <label>Index</label>
            <uri>/</uri>
            <pages>

                <home>
                    <label>home</label>
                    <uri>/</uri>
                </home>

                <about>
                    <label>about</label>
                    <uri>/about</uri>
                </about>

                <works>
                    <label>works</label>
                    <uri>/works</uri>
                    <pages>
                        <music>
                            <label>music</label>
                            <uri>/works/music</uri>
                        </music>
                    </pages>
                </works>
                <posts>
                    <label>posts</label>
                    <uri>/posts</uri>
                </posts>                
                <admin>
                    <label>admin</label>
                    <uri>/admin</uri>
                    <pages>
                        <login>
                            <label>log in</label>
                            <uri>/admin/login</uri>
                        </login>
                        <settings>
                            <label>settings</label>
                            <uri>/admin/settings</uri>
                        </settings>
                        <register>
                            <label>register</label>
                            <uri>/admin/register</uri>
                        </register>
                        <logout>
                            <label>log out</label>
                            <uri>/admin/logout</uri>
                        </logout>
                    </pages>
                </admin>

            </pages>
        </index>
    </nav>
</configdata>
  

И вот соответствующий код в моем макете:

 echo $this->navigation()->menu()->renderMenu(
    null, 
    array(
        'minDepth' => 2, 
        'maxDepth' => 2, 
        'onlyActiveBranch' => true
    )
);
  

Когда я перехожу к «администратору», я не вижу подменю. Если я изменю значение minDepth на 1, я увижу, что это меню и его дочерние элементы «активны» в исходном коде. Почему они не отображаются, когда minDepth установлено значение 2?

Я нашел обходной путь для этого, но мне нужно скопировать / вставить его в каждый контроллер, чтобы он работал (потому что для этого мне нужен объект запроса):

     $pages = $this->view->navigation()->current()->getPages();
    foreach ($pages as $page) {
        $this->_setChildrenInvisible($page);
    }
  

функция _setChildrenInvisible() :

 private function _setChildrenInvisible(Zend_Navigation_Container $container) {
    foreach ($container as $child) {
        if ($child->hasChildren()) {
            $this->_setChildrenInvisible($child);
        }
        $child->setVisible(false);
    }
}
  

Я просто пытаюсь заставить admin дочерние элементы отображаться в подменю. Кто-нибудь знает, как это исправить?

Ответ №1:

В макете, в renderMenu методе, renderParents атрибут должен быть установлен на false

 echo $this->navigation()->menu()->renderMenu(
    null, 
    array(
        'minDepth' => 2, 
        'maxDepth' => 2, 
        'onlyActiveBranch' => true, 
        'renderParents' => false
    )
);
  

Ответ №2:

Я знаю, что это старый вопрос, но он все еще может быть актуален для некоторых людей, натыкающихся на это. В ZF2 это можно сделать так же, как и в ZF1, используя:

 echo $this->navigation()->menu()->renderSubMenu();