2015-11-06 44 views
0

在ZF2中,可以使用阵列和数据库组合(扩展)导航项目吗?zf2导航从控制器注入页面

我有根导航(深度级别1和2),该配置驻留为php文件navigation.config.php。现在有一个基于产品类别的页面,该页面将为每个类别创建一个带有子页面的导航。

module 
\-submodule 
    \-category 1 
    \-add 
    \-edit 
    \-form 
    \-list 
    \- ... 
    \-category n 

每当我添加一个类别时,将所有数据写入数组是很麻烦的。相反,它会很好如果我通过从db读取类别来加载它,而不是创建一个递归的mvc页面来进行导航。

所有类别actualy调用相同的控制器,但为了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); 
    } 
} 

它出来很好,但后来我无法将菜单设置为活动上点击自己和父母。 也许在Module bootstrap中做得更好。

那么任何想法如何?

回答

0

好的,我的解决方法是从控制器添加页面。也许有一个更好的办法

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。