使用Twig在循环内打印循环?

时间:2016-04-29 13:14:46

标签: twig

我在Twig数组中嵌套了内容。我有几个月,每个都有几天:

在我的page.twig中:

{% set mock = {
  main_title: 'Main title',
  months:
    [
      {
        sub_title: 'Title 1',
        days: [
          {
            monday: 'Lorum',
            tuesday:  'Ipsum'
          }
        ]
      },
      {
        sub_title: 'Title 2',
        days: [
          {
            monday: 'Dolorem',
            tuesday:  'Neque'
          }
        ]
      }
    ]
  }
%}

{% include "component.twig" %}

我试图打印每个月的子标题及其下的日期文字:

<h2>Title 1</h2>
<h3>Lorum</h3>
<h3>Ipsum</h3>

<h2>Title 2</h2>
<h3>Dolorem</h3>
<h3>Neque</h3>

在component.twig中:

{% for m in months %}
    <h2>{{ m.sub_title }}</h2>

    {% for d in months.days %}
        <h3>Print test</h3>
    {% endfor %}

{% endfor %}

<h2>中的月份子标题打印正常,但我甚至无法在几个月内正确循环播放。

1 个答案:

答案 0 :(得分:1)

看来错误出现在你的第二个循环中。而不是几个月。你需要使用m.days。

您的第一个循环将月份拉入变量m。由于您的主数组月份没有元素天数,但每个月都有,因此您的内部循环当前没有要打印的内容。

正如旁注,如果此模板不使用autoescape,我还建议添加转义。

{% for m in months %}
  <h2>{{m.sub_title| e}}</h2>
  {% for d in m.days %}
     <h3>{{ d| e }}</h3>
   {% endfor %}
{% endfor %}

------ -----编辑

我第一次错过了你的样本数组有一个数组&#34;天&#34;在其中使用哈希而不是单个级别。在这种情况下,您实际上拥有days键的等价物(在数组中的数组中为PHP)。

在这种情况下,这应该可以解决问题

{% for m in months %}
  <h2>{{m.sub_title| e}}</h2>
  {% for d in m.days[0] %}
     <h3>{{ d| e }}</h3>
   {% endfor %}
{% endfor %}