情况如何?我在html.twig文件中有以下代码:
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
{% if site == 'users'%}
...
<li class="active"><a href="...">User list</a></li>
<li><a href="...">Register</a></li>
{% elseif site == 'registration' %}
<li><a href="welcome">Home</a></li>
...
<li class="active"><a href="...">Register</a></li>
{% else if site == '...' %}
.
.
.
{% endif %}
它非常'看起来很脏',强制多次重复代码,在这种情况下根本不存在可重用性。
目标是什么?目标是通过仅将所有<a href="...">
链接放置一次来缩短此代码。但是,在某种程度上,class =“active”参数必须包含在其中一个<a>
标记中 - 具体取决于变量数据。
我的解决方案(次优):
以下是我使用Twig'set'操作数所做的事情。但是代码仍然很长,它使用尽可能多的{%if%}子句作为可能的变量值。
{% set welcome_but = '' %}
...
{% set reg_but = '' %}
{% if site == 'users'%}
{% set user_but = 'active' %}
...
{% elseif site == 'registration' %}
{% set reg_but = 'active' %}
{% endif %}
<li class="{{ welcome_but }}"><a href="...">Home</a></li>
<li class="{{ reg_but }}"><a href="...">Register</a></li>
有什么问题?
如何达到最佳解决方案 - 即使用一个'if'或'bind'语句,而不是使用可能值数量的'if'语句出现的当前线性进展。也许应该使用JS函数或jQuery解决方案?
答案 0 :(得分:0)
这是使用Twig打印已知链接数组的简明方法
{# Set array with links #}
{% set linkArray = [{'name': 'Home', 'href': '#home', 'site': 'user'},
{'name': 'Register', 'href': '#register', 'site': 'registration'}] %}
<ul class="nav navbar-nav">
{# Iterate over items #}
{% for i, item in linkArray %}
<li{% if site == item.site%} class="active"{% endif %}>
<a href="{{ item.href }}">{{ item.name }}</a>
</li>
{% endfor %}
</ul>
请查看https://github.com/KnpLabs/KnpMenuBundle以获取高级菜单处理功能。
更具体地了解他们如何摇滚菜单: https://github.com/KnpLabs/KnpMenu/blob/master/src/Knp/Menu/Resources/views/knp_menu.html.twig