我有一个twig-template(带有twitter bootstrap),代码如下 - 它是一个导航栏:
<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中。所以我想根据打开的页面更改list元素中的class =“active”。
如果不在模板中添加太多逻辑,我怎样才能实现这一目标?
答案 0 :(得分: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>
在Module1包目录中:
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;
}
}