我创建了一个4页的小网站,意思是4个导航点。这些导航点中总有一个在css中设置为活动状态:
class="active"
所有这4页都继承了定义导航的layout.html.twig文件。 哪种更改类(“活动”)类的最简单方法取决于选择的导航点?
提前感谢您的帮助!
答案 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()
方法时,有效类会自动可用。
答案 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 %}">