2012-07-12 190 views
1

上我有一个树枝模板(与Twitter的引导)用下面的代码 - 这是一个导航栏:更改密码

<ul class="nav"> 
    <li class="active"><a href="#">Modul 1</a></li> 
    <li><a href="#about">Modul 2</a></li> 
    <li><a href="#contact">Modul 3</a></li> 
</ul> 

此代码是我global.html.twig。所以我想根据打开的页面在列表元素中更改class =“active”。

我怎样才能在我的模板中不添加太多的逻辑来实现这一点?

回答

3

在没有太多开销的情况下实现此目的的唯一方法是使用KnpLabs/KnpMenuBundle

在你global.html.twig:

<ul class="nav"> 
    {{ knp_menu_render('YourModule1Bundle:MenuBuilder:module1Menu', {'currentClass': 'active'}) }} 
    {{ knp_menu_render('YourModule2Bundle:MenuBuilder:module2Menu', {'currentClass': 'active'}) }} 
    {{ knp_menu_render('YourModule3Bundle:MenuBuilder:module3Menu', {'currentClass': 'active'}) }} 
</ul> 

在你的模块1包目录:

  • 创建一个文件夹Menu
  • 创建MenuBuilder.php如下:

-

<?php 
namespace YourMenu1Bundle\Menu; 

use Knp\Menu\FactoryInterface; 
use Symfony\Component\DependencyInjection\ContainerAware; 

class MenuBuilder extends ContainerAware 
{ 
    public function applicationMenu(FactoryInterface $factory, array $options) 
    { 
     $rootMenu = $factory->createItem('rootMenu'); 
     $rootMenu->setChildrenAttributes(array('class' => 'nav')); 
     $rootMenu->setCurrentUri($this->container->get('request')->getRequestUri()); 
     $menu = $rootMenu->addChild('Module 1', array('route' => 'the_wanted_route')); 
     return $rootMenu; 
    } 
} 
+0

谢谢!这样可行! – 2012-07-16 06:26:46

+1

+1这很好,在我看来,文档需要包括这个 – 2013-07-27 18:46:37