Symfony2标记菜单为活动layout.html.twig

时间:2014-02-24 13:00:06

标签: symfony navigation twig

我创建了一个4页的小网站,意思是4个导航点。这些导航点中总有一个在css中设置为活动状态:

class="active"

所有这4页都继承了定义导航的layout.html.twig文件。 哪种更改类(“活动”)类的最简单方法取决于选择的导航点?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

您可以使用KnpMenuBundle。例如,在src/Foo/BarBundle/Menu/MenuBuilder.php

<?php

namespace Foo\BarBundle\Menu;

use Knp\Menu\FactoryInterface;
use Symfony\Component\HttpFoundation\Request;

class MenuBuilder
{

    private $factory;

    public function __construct(FactoryInterface $factory)
    {
        $this->factory = $factory;
    }

    public function createMyMenu(Request $request)
    {
        $menu = $this->factory->createItem('root');
        $menu->setChildrenAttributes(array('class' => 'my-menu'));

        // Always visible
        $menu->addChild('Home', array('route' => 'foo_bar_homepage'));

        // According to the current route
        switch($request->get('_route')) {

                case 'item_list':
                    $menu->addChild('Items')
                        ->setCurrent(true);
                break;

                case 'item_show':
                    $menu->addChild('Items', array('route' => 'item_list'));
                    $menu->addChild('Show')
                        ->setCurrent(true);
                break;

                // ...

      }
}

调用setCurrent()方法时,有效类会自动可用。

文档可用here,您可以找到另一个教程here

答案 1 :(得分:3)

由于我没有那么多的导航点,我用树枝的if标签解决了这个问题。

<a href="{{ path('dbe_underConstruction') }}" title="Home" 
{% if app.request.get('_route') == 'dbe_underConstruction' %} class="active"{% endif %}>Home </a>

这可能不是一个明确的解决方案,但它可以正常工作: - )

答案 2 :(得分:0)

您可以定义当前菜单条目:

{% set current_menu = "home" %}

然后检查当前菜单条目是什么:

<li class="nav-item{% if current_menu is same as("home") %} active{% endif %}">