2012-07-12 235 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