Reputation: 8621
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
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