2010-09-06 156 views
0

如何將類添加到活動導航鏈接?如果一個鏈接指向URI /索引/索引和請求的URI也/指數/指數,我想鏈接到有類,例如:Zend_Navigation將類添加到活動鏈接

<li class="active"> 
    <a href="/index/index">Index</a> 
</li> 

這是我如何在引導初始化導航:

protected function _initNavigation() 
{ 
$navigation = new Zend_Navigation($this->getOption('navigation')); 
$this->view->navigation($navigation); 
} 

回答

2

好吧,

我已經寫控制器插件解決了這個:

<?php 
class My_Controller_Plugin_PrepareNavigation extends Zend_Controller_Plugin_Abstract 
{ 
    public function routeShutdown(Zend_Controller_Request_Abstract $request) 
    { 
     $viewRenderer = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer'); 
     $viewRenderer->initView(); 
     $view = $viewRenderer->view; 

     $container = new Zend_Navigation(Zend_Registry::get('configuration')->navigation); 
     foreach ($container->getPages() as $page) { 
      $uri = $page->getHref(); 
      if ($uri === $request->getRequestUri()) { 
       $page->setClass('active'); 
      } 
     } 
     $view->navigation($container); 
    } 
} 
+0

的最佳解決辦法是創建自己的部分呈現菜單並在那裏處理條件。上述方法需要遍歷所有元素兩次(一次在控制器中,另一次在渲染過程中)。 – takeshin 2010-09-06 09:34:19

0

這個我如何使用Application在zend框架中創建導航()在layout()中。那麼,至少有一種方法可以做到這一點。該CSS類的

放設置該進的bootstrap.php文件:

protected function _initNavigation() 
{ 
    $this->bootstrap('layout'); 
    $layout = $this->getResource('layout'); 
    $view = $layout->getView();   
    include APPLICATION_PATH . '/layouts/scripts/menu.phtml';  
    $view->navigation($container); 
}  

這允許您創建的文件menu.phtml菜單中的數組,所以你仍可以保持當前鏈接上的活動類。出於某種奇怪的原因,如果你使用它,你必須在數組中包含controller屬性來獲取當前鏈接上的CSS活動類。

把這樣的事情到/layouts/scripts/menu.phtml文件:

$container = new Zend_Navigation(array(
array(
    'label' => 'HOME', 
    'id' => 'tasks', 
    'uri'=>'/', 
    'controller' => 'Index' 
), 
array(
    'label' => 'Contact', 
    'uri' => 'contact', 
    'controller' => 'Contact' 
), 

.... more code here ...   

把這個到layout.phtml文件:

$options = array('ulClass' => 'menu');