1

次のコードを含むtwig-template(twitterブートストラップ付き)があります-それはnavbarです:

<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 に答える