Zend_Navigation добавить класс к активной ссылке - PullRequest
0 голосов
/ 06 сентября 2010

Как я могу добавить класс к активной навигационной ссылке? Если ссылка указывает на URI / index / index и URI запроса также / index / index, я хотел бы, чтобы ссылка имела класс, например:

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

2 голосов
/ 06 сентября 2010

Хорошо,

Я решил это, написав плагин контроллера:

<?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 голосов
/ 03 февраля 2012

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