依赖于变量

时间:2015-12-17 23:55:03

标签: jquery html css twig

情况如何?我在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解决方案?

1 个答案:

答案 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