2014-12-03 128 views
0

介紹

我的工作有每頁兩個導航菜單的一個非常大的網站時,顯示的是孩子的路線導航的活動狀態。第一個是全局導航,鏈接到網站的各個部分,第二個是全局導航菜單中所選項目的部分級導航。Zend框架2:使用多個導航

爲了提高效率,我們決定始終加載Navigation服務中的整個站點導航結構是不明智的。相反,我們選擇始終加載全局導航結構,但隨後使用基於加載部分生成的單獨的Navigation

配置

全球Navigation看起來是這樣的:

array(
    array(
     'type' => 'mvc', 
     'label' => 'Section 1', 
     'route' => 'section1' 
    ), 
    array(
     'type' => 'mvc', 
     'label' => 'Section 2', 
     'route' => 'section2' 
    ), 
    array(
     'type' => 'mvc', 
     'label' => 'Section 3', 
     'route' => 'section3' 
    ) 
) 

和動態加載的科級Navigation看起來是這樣的:

array(
    array(
     'type' => 'uri', 
     'label' => 'Group 1', 
     'pages' => array(
      array(
       'type' => 'mvc', 
       'label' => 'Page 1', 
       'route' => 'section1/page1' 
      ), 
      array(
       'type' => 'mvc', 
       'label' => 'Page 2', 
       'route' => 'section1/page2' 
      ), 
      array(
       'type' => 'mvc', 
       'label' => 'Page 3', 
       'route' => 'section1/page3' 
      ), 
     ) 
    ) 
    // ... more groups 
) 

問題

的問題是即全球Navigation只有在當前正在請求高層路線時纔有活動項目(例如, section1)。只要用戶導航到該部分內的其他頁面(例如section1/page1),全局Navigation就不再有活動項目。

什麼受審

通過Menu插件和Page類的源讀取後,它看起來像它僅支持按名稱精確的路線匹配和設置controller選項不起作用。

只是爲了測試,我們添加了部分Navigation全球Navigation它將在標準配置來完成和所需的結果顯示,其中全球產品總是在部分的所有路由有效。

有什麼辦法可以使這個工作與當前配置?如果不是,你會建議如何使結構能夠工作?

回答

0

我們已經成功使用像這樣在全球Navigation服務工廠:定義頁面時

$event = $serviceLocator->get('Application')->getMvcEvent(); 
$matched_route = $event->getRouteMatch()->getMatchedRouteName(); 
$route_section = explode('/',$matched_route)[0]; 

然後:

array(
    array(
     'type' => 'mvc', 
     'label' => 'Section 1', 
     'route' => 'section1', 
     'active' => ($route_section === 'section1') 
    ), 
    // ... etc 
) 

買者...

該解決方案可能是有限的。這可以防止我們擁有橫截面網址。在不更改全局導航活動項目的情況下,部分不能包含另一個部分中的路線的鏈接。希望這不會成爲我們的問題。