2010-09-06 4 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

0

Это я как создать навигацию() в макете() с помощью фреймворков zend с помощью приложения. Ну, по крайней мере, один из способов сделать это. класс 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');