#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();