【问题标题】:Symfony2 Mark menu as active layout.html.twigSymfony2 将菜单标记为活动 layout.html.twig
【发布时间】:2014-02-24 13:00:05
【问题描述】:

我创建了一个有 4 个页面的小网站,意味着 4 个导航点。在 css 中总有一个导航点设置为活动的:

class="active"

所有这 4 个页面都继承了定义导航的 layout.html.twig 文件。 根据选择的导航点更改类(“活动”)类的最简单方法是什么?

提前感谢您的帮助!

【问题讨论】:

标签: symfony navigation twig


【解决方案1】:

因为我没有那么多导航点,所以我用 twig 的 if 标记解决了这个问题。

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

这可能不是一个明确的解决方案,但效果很好:-)

【讨论】:

    【解决方案2】:

    您可以使用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;
    
                    // ...
    
          }
    }
    

    active类会在调用setCurrent()方法时自动可用。

    文档在here,你可以找到另一个教程here

    【讨论】:

      【解决方案3】:

      您可以定义当前菜单项:

      {% set current_menu = "home" %}
      

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

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

      【讨论】:

        猜你喜欢
        • 2022-06-15
        • 2012-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-18
        • 2016-06-08
        相关资源
        最近更新 更多