在树枝的循环中只显示一次

时间:2016-11-01 15:20:12

标签: php symfony twig

我想要几个月来展示一些照片。

但是我的代码我把每个月的照片都放在了最佳状态。

如何避免这种情况?

{% for media in medias %}
    {% if media.date|date("m") == 10 and media.assetpath is not null %}
      <h2>Photos october</h2>
      <div class="col-xs-2">
        <img class="img-responsive" src="{{ asset(media.assetpath)  }}"/>
        </div>
     {% elseif media.date|date("m") == 11 and media.assetpath is not null %}
       <h2>Photos november</h2>
       <div class="col-xs-2">
         <img class="img-responsive" src="{{ asset(media.assetpath)  }}"/>
        </div>
    {% else %}
      <h2>other month</h2>
      <div class="col-xs-2">
        <img class="img-responsive" src="{{ asset(media.assetpath)  }}"/>
     </div>
 {% endif %}
{% endfor %}

1 个答案:

答案 0 :(得分:1)

假设medias是按日期排序的数组,可以使用临时变量解决问题:

{% set last_month = '' %}
{% for media in medias %}
  {% set month = media.date('F')|lower %}
  {% if last_month and month != last_month %}
    <h2>Photos {{ month }}</h2>
  {% endif %}
  {% set last_month = month %}

  <div class="col-xs-2">
    <img class="img-responsive" src="{{ asset(media.assetpath)  }}"/>
  </div>
{% endfor %}

但是,我宁愿生成一个更合适的结构,例如:

$media = [
  'November' => [
    [ /* media 1 */],
    [ /* media 2 */],
    // ...
  ],
  // ...
];

使用这种结构,模板代码看起来会更清晰:

{% for month, media in medias %}
  <h2>Photos {{ month }}</h2>
  {% for m in media %}
  <div class="col-xs-2">
    <img class="img-responsive" src="{{ asset(m.assetpath) }}"/>
  </div>
  {% endfor %}
{% endfor %}