以下简单的代码:添加活动类与SF2链接和小枝
<li><a href="{{ path('_list') }}">List</a></li>
有一个简单的方法来添加一个class="active"
如果当前页面的_list
路由匹配?
使用的Symfony2的最新PR-释放和小树枝作为模板引擎
以下简单的代码:添加活动类与SF2链接和小枝
<li><a href="{{ path('_list') }}">List</a></li>
有一个简单的方法来添加一个class="active"
如果当前页面的_list
路由匹配?
使用的Symfony2的最新PR-释放和小树枝作为模板引擎
嫩枝允许条件语句和Request对象在整个应用程序可用。如果你是其中的模板,得到的路线要使用:
app.request.attributes.get('_route')
如果您正在使用的渲染功能,您要使用:
app.request.attributes.get('_internal')
有了这一点,你应该能够使用方法:
class="{% if app.request.attributes.get('_route') == '_list' %}active{% endif %}"
或更短:
class="{{ app.request.get('_route') == '_list' ? 'active' }}"
我发现了一个很不错的捆绑自动地处理这一切的东西:
SF2.2
{{ dump(app.request.server.get('PATH_INFO')) }}
Symfony2.3,在嫩枝,试试这个让URI:
{{ dump(app.request.server.get("REQUEST_URI")) }}
有时你不想做一个路线的精确匹配。对于这些情况,您可以使用枝条的“开始”条件逻辑。
举个例子,假设你正在使用书籍。您有以下路线:书籍,book_show,book_new,book_edit。您希望为任何这些情况突出显示导航项目Book。这段代码可以实现这一点。
<a class="{% if app.request.attributes.get('_route') starts with 'book' %}active{% endif %}">Books</a>
<a class="{% if app.request.attributes.get('_route') starts with 'author' %}active{% endif %}">Authors</a>
本例将至少Symfony的2.3.x版本
这是我要做的事(使用Symfony的2.6)
<li {% if app.request.get('_route') == '_homepage' %} class="active" {% endif %}><a href="{{ path('_homepage') }}">Student</a></li>
是路由的名称在你的包的routing.yml
并且路线看起来像这样
_homepage:
path: /
defaults: { _controller: CoreBundle:Default:index }
使用三元运算符:
{% set route = app.request.attributes.get('_route') %}
<ul class="nav navbar-nav">
<li {{ route == 'profile_index' ? 'class="active"' }}><a href="{{ path('profile_index') }}"><i class="icon-profile position-left"></i> My Profile</a></li>
<li {{ route == 'influencers_index' ? 'class="active"'}}><a href="{{ path('influencers_index') }}"><i class="icon-crown position-left"></i> Influencers</a></li>
<li {{ route == 'task_manager_index' ? 'class="active"'}}><a href="{{ path('task_manager_index') }}"><i class="icon-alarm-check position-left"></i> Task Manager</a></li>
</ul>
最短版本:
{% set route = app.request.get('_route') %}
<li class="{{ route starts with 'post' ? 'open' }}"></li>
<li class="{{ route starts with 'category' ? 'open' }}"></li>
有时有用:
{% set route = app.request.get('_route') %}
<li class="{{ 'post' in route ? 'open' }}"></li>
<li class="{{ 'category' in route ? 'open' }}"></li>
非常优雅。谢谢你。 – ACJ 2017-12-15 17:31:40
=“CLASS_NAME {%如果循环。索引0 == 0%} {CLASSNAME ENDIF%%}”
虽然这段代码片段是受欢迎的,并且可能会提供一些帮助,但如果它包含* how *和* why *的解释](// meta.stackexchange.com/q/114762)问题。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 – 2017-03-03 13:13:47
这是用symfony 3.4做过,但可能类似的东西可以用SF2完成。
的src \的appbundle \嫩枝\ AppExtension.php
<?php
namespace AppBundle\Twig;
use Symfony\Component\HttpFoundation\RequestStack;
class AppExtension extends \Twig_Extension
{
private $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('activeMenu', [$this, 'activeMenu'])
];
}
/**
* Pass route names. If one of route names matches current route, this function returns
* 'active'
* @param array $routesToCheck
* @return string
*/
public function activeMenu(array $routesToCheck)
{
$currentRoute = $this->requestStack->getCurrentRequest()->get('_route');
foreach ($routesToCheck as $routeToCheck) {
if ($routeToCheck == $currentRoute) {
return 'active';
}
}
return '';
}
}
添加这services.yml
services:
#... some other services
AppBundle\Twig\AppExtension:
arguments: ["@request_stack"]
用法:
<ul class="nav navbar-nav">
<li class="{{ activeMenu(['form', 'edit_form']) }}"><a href="{{ path('form') }}">Form</a></li>
<li class="{{ activeMenu(['list']) }}"><a href="{{ path('list') }}">List</a></li>
</ul>
是的,我在源代码中几分钟前发现了'_route'参数,但是我将它作为变量传递给模板,因为我不知道我可以直接从树枝访问请求变量。多数民众赞成真棒,谢谢! – choise 2011-04-18 14:32:38
可能会更近一些,但app.request.get('_ route')也适用。 – 2012-01-30 21:36:37
较短的版本:class =“{{app.request.attributes.get('_ route')=='_list'?'active'}}” – Jekis 2014-01-03 07:45:54