ZF2:导航中动态创建的子页面未激活(isActive()== false)

时间:2015-10-16 21:36:28

标签: zend-framework zend-framework2

我有以下问题......

这是我的导航:

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中我有功能:

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);
        }
    }

到目前为止一切顺利。现在我有分类项目的菜单和类别列表作为类别的子菜单。但是,当我单击列出的某个类别时,子菜单和父元素都没有“活动”类。当我点击Home时,我的课程“活跃”,所以问题出现在我认为的类别列表中。

这是我在布局中显示导航的方式:

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

我调试并发现当我在Zend \ Navigation \ Page \ Mvc - &gt;中动态生成这些类别时isActive函数$ this-&gt; 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',
                ),
            ),
        ),
    );
一切正常。 subMenu和父菜单的类为“active”....

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我想知道我找到了解决方案......

未在新页面中设置RouteMatch,因此我在之后添加了一行:

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

然后我的导航按预期工作。