ZF2:导航中动态创建的子页面不会变为活动状态(isActive() == false)



我有以下问题…

我的导航栏:

return array(
    'navigation' => array(
        'site' => array(
            array(
                'label' => 'Home',
                'route' => 'site',
            ),
            'categories' => array(
                'label' => 'Categories',
                'class' => 'categories',
                'uri' => '#',
            ),
            'contact-us' => array(
                'label' => 'Contact Us',
                'route' => 'site/contact-us',
            ),
        ),
    ),
);

在我的Module.php中我有function:

public function attachSubMenu($serviceManager) {
        $siteNavigation = $serviceManager->get('siteNavigation');
        $router = $serviceManager->get('router');
        $categoriesTable = $serviceManager->get('Category/Model/Table/CategoriesTable');
        $categories = $categoriesTable->fetchAll();
        $categoriesRoute = $siteNavigation->findByClass('categories');
        if (!is_null($categoriesRoute)) {
            $pages = array();
            foreach ($categories as $category) {
                $newPage = new Mvc(array(
                    'label' => $category->name,
                    'route' => 'site/categories',
                    'params' => array(
                        'category' => $category->route
                    ),
                ));
                $newPage->setRouter($router);
                array_push($pages, $newPage);
            }
            $categoriesRoute->addPages($pages);
        }
    }

到目前为止一切顺利。现在我有菜单与类别项目和列表与类别的子菜单的类别。但是,当我单击列出的类别之一时,子菜单和父元素都没有类"active"。当我点击主页,我有类"活动",所以问题是在类别列表的某个地方,在我看来。

这是我如何在布局中显示导航:

<?= $this->navigation('siteNavigation')->menu()->setMaxDepth(1); ?>

我调试发现,当我动态生成这些类别在ZendNavigationPageMvc -> isActive函数$this->getRoute()不返回类别路由…如果我像这样添加分类:

 return array(
        'navigation' => array(
            'site' => array(
                array(
                    'label' => 'Home',
                    'route' => 'site',
                ),
                'categories' => array(
                    'label' => 'Categories',
                    'class' => 'categories',
                    'uri' => '#',
                    'pages' => array(
                         array(
                            'label' => 'Cat1',
                            'route' => 'site/categories',
                            'params' => array(
                                'category' => 'cat1'
                             ),
                      //.....
                        ),
                    ),
                ),
                'contact-us' => array(
                    'label' => 'Contact Us',
                    'route' => 'site/contact-us',
                ),
            ),
        ),
    );

一切正常。子菜单和父菜单有一个类"active"....

有办法解决这个问题吗?

我想我找到解决办法了…

RouteMatch在新页面中没有设置,所以我在后面增加了一行:

$newPage->setRouter($router);
$newPage->setRouteMatch($routeMatch);//The new line;

然后我的导航工作正常。

最新更新