2015-11-06 51 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。

相關問題