如果在父项鼠标悬停上打开子项,则Zend\Navigation\Navigation
中传递的数组的Zend2导航工作正常。如果他们在鼠标点击时打开了不合需要的操用户无法直接进入子页面。在父菜单项的第一页打开。
<nav>
<ul class="sidebar">
<li>
<a class="item-1" href="parent-page1">Parent page1</a>
<ul>
<li>
<a class="item-1" href="child-page11">Child page11</a>
</li>
<li>
<a class="item-1" href="child-page12">Child page12</a>
</li>
</ul>
</li>
<li>
<a class="item-1" href="parent-page2">Parent page2</a>
<ul>
<li>
<a class="item-1" href="child-page21">Child page21</a>
</li>
<li>
<a class="item-1" href="child-page22">Child page22</a>
</li>
</ul>
</li>
如果有一个选项可以完全从父项中删除“href”属性,则可以解决问题。但是我在Zend2文档或示例中找不到这样的选项。我认为这是我的错,因为必须有可能用可点击的父项解析菜单。该类型菜单用于流行的管理面板,例如AdminLTE。
目前我正在使用看起来不太好的解决方案。在导航数组中,我将'class' => 'not-active'
添加到每个父项。然后在应用程序布局中,JavaScript完成工作
window.onload = function () {
x = document.getElementsByClassName("not-active");
for(var i=0,j=x.length; i<j; i++){
x[i].removeAttribute("href");
};
}
修改
终于找到了解决方案。必须在module.config.php
'empty' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array('route' => '#'),
),
然后在导航阵列中使用它
array(
'label' => 'Parent page1',
'route' => 'empty',
'controller' => 'admins',
'resource' => 'Admin\Controller\Admins',
'privilege' => 'index',
'pages' => array(
array(
'label' => 'Child page11',
'route' => 'admin/default',
'controller' => 'admins',
'resource' => 'Admin\Controller\Modules',
'privilege' => 'index',
),
array(
'label' => 'Child page12',
'route' => 'admin/default',
'controller' => 'modules',
'resource' => 'Admin\Controller\Modules',
'privilege' => 'index',
),
),
),
编辑2
不幸的是,当站点位于子路径中时,解决方案不起作用。
我从<a href="#">Parent 1</a>
example.com
但来自<a href="subpath/#">Parent 1</a>
example.com/subpath/
所以我回到Javascript的后期处理:(
答案 0 :(得分:1)
您只需添加#作为父href。
<a href="#">Parent 1</a>
点击浏览器不会重新加载或去某个地方,你留在那个网站上。