Zend_Navigation将类添加到活动链接

时间:2010-09-06 06:56:35

标签: php zend-framework zend-navigation

如何将类添加到活动导航链接?如果链接指向URI / index / index并且请求URI也是/ index / index,我希望链接具有类,例如:

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

这就是我在bootstrap中初始化导航的方法:

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

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

这是使用Application使用zend框架在layout()中创建navigation()的方法。 好吧,至少有一种方法。

中设置了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');