Php Zend Framework 2:使用多个导航时显示子路由的活动导航状态 介绍
我在一个非常大的网站上工作,每页有两个导航菜单。第一个是链接到网站部分的全局导航,第二个是全局导航菜单中所选项目的部分级导航 为了提高效率,我们认为总是在导航服务中加载整个站点导航结构是不明智的。相反,我们选择始终加载全局导航结构,然后使用基于加载的部分生成的单独导航 配置 全局导航如下所示:Php Zend Framework 2:使用多个导航时显示子路由的活动导航状态 介绍,php,zend-framework2,Php,Zend Framework2,我在一个非常大的网站上工作,每页有两个导航菜单。第一个是链接到网站部分的全局导航,第二个是全局导航菜单中所选项目的部分级导航 为了提高效率,我们认为总是在导航服务中加载整个站点导航结构是不明智的。相反,我们选择始终加载全局导航结构,然后使用基于加载的部分生成的单独导航 配置 全局导航如下所示: array( array( 'type' => 'mvc', 'label' => 'Section 1', 'route' =>
array(
array(
'type' => 'mvc',
'label' => 'Section 1',
'route' => 'section1'
),
array(
'type' => 'mvc',
'label' => 'Section 2',
'route' => 'section2'
),
array(
'type' => 'mvc',
'label' => 'Section 3',
'route' => 'section3'
)
)
动态加载的节级导航如下所示:
array(
array(
'type' => 'uri',
'label' => 'Group 1',
'pages' => array(
array(
'type' => 'mvc',
'label' => 'Page 1',
'route' => 'section1/page1'
),
array(
'type' => 'mvc',
'label' => 'Page 2',
'route' => 'section1/page2'
),
array(
'type' => 'mvc',
'label' => 'Page 3',
'route' => 'section1/page3'
),
)
)
// ... more groups
)
问题
问题在于,当当前正在请求高级路线时,全局导航只有一个活动项,例如Section 1。一旦用户导航到该节中的另一页,例如section1/page1,全局导航就不再有活动项
尝试了什么
在阅读了菜单插件和页面类的源代码之后,它似乎只支持按名称进行的精确路由匹配,并且设置控制器选项不起作用
为了测试,我们将节导航添加到全局导航中,就像在标准配置中所做的那样,当全局项在节中的所有路由中始终处于活动状态时,将显示所需的结果
在当前配置下,是否有任何方法可以实现此功能?如果没有,您会建议如何制作该结构以使其能够工作?我们在全球导航服务工厂成功地使用了类似的功能:
$event = $serviceLocator->get('Application')->getMvcEvent();
$matched_route = $event->getRouteMatch()->getMatchedRouteName();
$route_section = explode('/',$matched_route)[0];
然后在定义页面时:
array(
array(
'type' => 'mvc',
'label' => 'Section 1',
'route' => 'section1',
'active' => ($route_section === 'section1')
),
// ... etc
)
警告
这一解决方案可能具有局限性。这会阻止我们使用横截面URL。如果不更改全局导航活动项,则节不能包含另一节中路线的链接。希望这不会成为我们的问题