在ZF2中,可以使用数组和数据库组合(扩展)导航项?
我有根导航(深度级别1和2),配置作为一个php文件navigation.config.php。现在有一个基于产品类别的页面,它将为每个类别创建一个带有子页面的导航。
module
'-submodule
'-category 1
'-add
'-edit
'-form
'-list
'- ...
'-category n
每次我添加一个类别时,把所有东西都写成数组是很烦人的。相反,如果我通过从数据库中读取类别来使用代码加载它,而不是创建一个用于导航的递归mvc页面,那就太好了。
所有类别实际上都调用相同的控制器,但为了UI的缘故,我不得不让它像上面一样。
我通过使用控制器创建页面进行测试
public function listAction() {
$this->addPages(
array(
array(
'label' => 'R12313',
'route' => 'home',
'pages' => array(
array(
'label' => 'R12313cccc',
'route' => 'home',
)
)
),
array(
'label' => 'R123132',
'route' => 'home',
)
)
);
}
public function addPages($pages = array(), $min = 1, $max = 2) {
$navigation = $this->services->get('viewhelpermanager')->get('navigation');
$navigation = $navigation('navigation');
$active = $navigation->findActive($navigation->getContainer(), $min, $max);
if (isset($active['page'])) {
$active = $active['page'];
$pages = array('route' => 'home', 'pages' => $pages);
$newpage = 'Zend'Navigation'Page'AbstractPage::factory($pages);
$newpage->setDefaultRouter($this->services->get('router'));
$active->addPages($newpage);
}
}
它表现得很好,但我无法将菜单设置为活动的点击本身和父菜单。也许在模块引导中做这件事更好。
你知道怎么做吗?
好的,这是我从控制器添加页面的解决方法。也许有更好的方法
public function addPages($id, $pages = array()) {
$services = $this->getServiceLocator();
$navigation = $services->get('viewhelpermanager')->get('navigation');
$navigation = $navigation('navigation');
$active = $navigation->findById($id);
if ($active instanceof 'Zend'Navigation'Page'AbstractPage) {
$navigationFactory = new 'Zend'Navigation'Service'ConstructedNavigationFactory($pages);
$pages = $navigationFactory->getPages($services);
$active->addPages($pages);
}
}
如果要以这种方式添加,则必须在navigation.config.php中指定页面id。