Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework 2:使用多个导航时显示子路由的活动导航状态 介绍_Php_Zend Framework2 - Fatal编程技术网

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。如果不更改全局导航活动项,则节不能包含另一节中路线的链接。希望这不会成为我们的问题