EternalHour
EternalHour

Reputation: 8621

Concatenate output from template file inside twig for loop to variable?

I have a situation where I need to include a template file inside another template and output it in a for loop. The problem I am having though, is that it's outputting to a container and I only need the container to render once, but I need the included template to render on all iterations of the loop.

{% for details in array %}

  {% set data_details %}
    {{ include('data.html.twig') }}
  {% endset %}

  <!-- Other HTML needed in the loop -->

  {% if loop.first %}
    <tr class="table-row">
      <td>
        {{ data_details | raw }}
      </td>
    </tr>
  {% endif %}

{% endfor %}

As you can see, the {% if loop.first %} prevents the container from repeating. But I need data.html.twig to loop on every iteration and append the HTML to the data_details variable but the variable only contains the last iteration. I am not that knowledgeable with Twig so maybe I am going about this the wrong way. The documentation says if you wrap something in a set it will "capture" the output but that isn't happening for some reason.

Upvotes: 0

Views: 409

Answers (1)

DarkBee
DarkBee

Reputation: 15648

You're close, the iteration does overwrite the already set variable. To append to the already set variable , you can repeat/output the variable in the wrap to recapture/concatenate it

  {% set data_details %}
    {{ data_details | default('') }}
    {{ include('data.html.twig') }}
  {% endset %}

Upvotes: 2

Related Questions