Zend_Navigation将类添加到活动链接

Zend_Navigation将类添加到活动链接

问题描述:

如何将类添加到活动导航链接?如果一个链接指向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); 
} 

好吧,

我已经写控制器插件解决了这个:

<?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

这个我如何使用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');