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" 。

如何在不在模板中添加太多逻辑的情况下实现这一点?

4

1 回答 1

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;
  }
}
于 2012-07-12T11:46:17.190 回答