嘿,我想在我的标题中进行布局,其中有全局菜单,然后是页面菜单,然后是面包屑。为此,我主要从这个答案中拿走了:Rendering Active Branch of Zend Navigation without Top Level
这很好用,除了活动分支从注册的 Zend_Navigation_Container 中删除。
我就是这样做的:
<nav>
<?php
//Create top level menu
echo $this->navigation()->menu()
->setUlClass('main')
->setMaxDepth(0)
->setIndent(4)
. PHP_EOL;
//Set to get the whole active branch
$this->navigation()
->setMinDepth(0)
->setMaxDepth(0);
//Retrive the active branch
$activeBranchTopLvl =
$this->navigation()->findActive(
$this->navigation()->getContainer());
//Get the 2nd level pages for the active page
$activeBranch = $activeBranchTopLvl['page']->getPages();
$subMenu = new Zend_Navigation();
//This is the line that removes the active branch
$subMenu->setPages($activeBranch);
//Render 2nd level menu
echo $this->navigation()->menu($subMenu)
->setUlClass('sub')
. PHP_EOL;
//Set up for breadcrumbs
$this->navigation()->breadcrumbs()->setMinDepth(0);
$this->navigation()->setMaxDepth(null);
$this->navigation()->breadcrumbs()->setRenderInvisible(true);
?>
</nav>
<p id="breadcrumbs"><?php echo $this->navigation()->breadcrumbs()->render(); ?></p>
结果是面包屑不存在:
<nav>
<ul class="main">
<li class="active">
<a href="/auth">Auth</a>
</li>
</ul>
<ul class="sub">
<li class="active">
<a href="/auth/login">Log In</a>
</li>
<li>
<a href="/auth/logout">Log Out</a>
</li>
</ul>
</nav>
<p id="breadcrumbs"></p>
活动分支已被切断到顶层,这里是切断前的 Zend_Navigation_Container:
...
$subMenu = new Zend_Navigation();
print_r($this->navigation()->getContainer()->toArray());
//This is the line that removes the active branch
$subMenu->setPages($activeBranch);
//Render 2nd level menu
...
这将输出整个容器:
...
Array
(
[0] => Array
(
[label] => Auth
[fragment] =>
[id] =>
[class] =>
[title] =>
[target] =>
[accesskey] =>
[rel] => Array
(
)
[rev] => Array
(
)
[order] =>
[resource] =>
[privilege] =>
[active] =>
[visible] => 1
[type] => Zend_Navigation_Page_Mvc
[pages] => Array
(
[0] => Array
(
[label] => Log In
[fragment] =>
[id] =>
[class] =>
[title] =>
[target] =>
[accesskey] =>
[rel] => Array
(
)
[rev] => Array
(
)
[order] =>
[resource] =>
[privilege] =>
[active] => 1
[visible] => 1
[type] => Zend_Navigation_Page_Mvc
[pages] => Array
(
)
[action] => login
[controller] => auth
[module] =>
[params] => Array
(
)
[route] =>
[reset_params] => 1
[encodeUrl] => 1
)
[1] => Array
(
[label] => Log Out
[fragment] =>
[id] =>
[class] =>
[title] =>
[target] =>
[accesskey] =>
[rel] => Array
(
)
[rev] => Array
(
)
[order] =>
[resource] =>
[privilege] =>
[active] =>
[visible] => 1
[type] => Zend_Navigation_Page_Mvc
[pages] => Array
(
)
[action] => logout
[controller] => auth
[module] =>
[params] => Array
(
)
[route] =>
[reset_params] => 1
[encodeUrl] => 1
)
)
[action] =>
[controller] => auth
[module] =>
[params] => Array
(
)
[route] =>
[reset_params] => 1
[encodeUrl] => 1
)
)
...
这是在我将页面添加到新容器之后:
...
$subMenu = new Zend_Navigation();
//This is the line that removes the active branch
$subMenu->setPages($activeBranch);
print_r($this->navigation()->getContainer()->toArray());
//Render 2nd level menu
...
输出:
...
Array
(
[0] => Array
(
[label] => Auth
[fragment] =>
[id] =>
[class] =>
[title] =>
[target] =>
[accesskey] =>
[rel] => Array
(
)
[rev] => Array
(
)
[order] =>
[resource] =>
[privilege] =>
[active] =>
[visible] => 1
[type] => Zend_Navigation_Page_Mvc
[pages] => Array
(
)
[action] =>
[controller] => auth
[module] =>
[params] => Array
(
)
[route] =>
[reset_params] => 1
[encodeUrl] => 1
)
)
...
我不知道为什么在我创建新容器并将页面添加到其中时会发生这种情况,似乎它们已从我在 Zend_Registry 中的 Zend_Navigation 键下的容器中删除。
很快,如果我注释掉该行,面包屑会再次起作用并且容器保持不变,但我当然会丢失第二级菜单:
...
$subMenu = new Zend_Navigation();
//This is the line that removes the active branch
//$subMenu->setPages($activeBranch);
//Render 2nd level menu
...
输出:
...
<nav>
<ul class="main">
<li class="active">
<a href="/auth">Auth</a>
</li>
</ul>
</nav>
<p id="breadcrumbs"><a href="/auth">Auth</a> > Log In</p>
...