在循环内替换字符串变量

时间:2014-12-15 16:25:43

标签: symfony twig

我在树枝/交响乐中有一个循环,如下:

{% for breadcrumb in page.breadcrumbs %}    
  <a href="{{ breadcrumb.url | url }}">{{ breadcrumb.title }}</a>
{% endfor %}

我试图检查for循环中的第一个变量。如果等于Artists,那么html部分需要被新的代码替换。

所以我做的是:

 {% for breadcrumb in page.breadcrumbs %}

  {% if loop.first %}
  {% if breadcrumb.title == 'Artists' %}
  <a href="{{ 'artists' | url }}">{{ 'Artists' | t }}</a>{% else %}<a href="{{ breadcrumb.url | url }}">{{ breadcrumb.title }}</a>
  {% endif %}
  {% endif %}

  {% endfor %}

然而,当bradcrumb路径变深然后两个级别然后第二级别之后的所有内容都不再显示时,这是有效的。所以我的意思是:

home > Artist > //nothing shown here anymore. Loop stops I think??

Instead of 

home > artists > category1 > subcategory 2

有谁知道我做错了什么。为什么循环会停止使用此代码?

2 个答案:

答案 0 :(得分:1)

循环继续,但您已将整个输出逻辑包装到loop.first变量条件中。

你需要这样做:

{% for breadcrumb in page.breadcrumbs %}
    {% if loop.first and breadcrumb.title == 'Artists' %}
        <a href="{{ 'artists' | url }}">{{ 'Artists' | t }}</a>
    {% else %}
        <a href="{{ breadcrumb.url | url }}">{{ breadcrumb.title }}</a>
    {% endif %}
{% endfor %}

通过这种方式,您将检查两者循环的第一次迭代以及标题是否为&#34; Artists&#34;

答案 1 :(得分:0)

您只是检查第一次迭代(第一次循环),而对其余部分不执行任何操作:

{% for breadcrumb in page.breadcrumbs %}

    {% if loop.first %}
        {% if breadcrumb.title == 'Artists' %}
            <a href="{{ 'artists' | url }}">{{ 'Artists' | t }}</a>
        {% else %}
            <a href="{{ breadcrumb.url | url }}">{{ breadcrumb.title }}</a>
        {% endif %}
   {% endif %}

{% endfor %}