# Loop in CMS Block component twig

**URL:** <https://forum.shopware.com/t/loop-in-cms-block-component-twig/92631>\
**Category:** Programmierung\
**Created:** [27. Januar 2022 um 12:41 UTC](https://forum.shopware.com/t/loop-in-cms-block-component-twig/92631 "2022-01-27T12:41:30Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![klogges](https://avatars.discourse-cdn.com/v4/letter/k/eb9ed0/32.png) [@klogges](https://forum.shopware.com/u/klogges)\
**Post date:** [27. Januar 2022 um 12:41 UTC](https://forum.shopware.com/t/loop-in-cms-block-component-twig/92631/1 "2022-01-27T12:41:30Z")

</div>

Ich versuche in einem Custom CMS Block im component twig template die einzelnen Slots für eine Galerie per loop zu erzeugen.  
Z.B. so:  
`<slot name="image-{{ i }}"></slot>`  
oder so  
`{{ '<slot name="image-#{ i }"></slot>' }}`  
oder concatiert in variable:  
`{% set slot = '<slot name="image-' ~ i ~ '"></slot>' %} {{ slot }} `

Jede Schreibweise (die in Twig so funktionieren sollte) erzeugt aber Fehler. Wird der Template Code evaluiert? Ist es nicht möglich darin Variablen zu setzen?

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [27. Januar 2022 um 14:35 UTC](https://forum.shopware.com/t/loop-in-cms-block-component-twig/92631/2 "2022-01-27T14:35:13Z")

</div>

{% for … %}  
{{ loop.index }}  
{% endfor %}

> **[for - Documentation - Twig - The flexible, fast, and secure PHP template engine](https://twig.symfony.com/doc/3.x/tags/for.html)**
>
> Twig - The flexible, fast, and secure template engine for PHP

---

<div class="post-metadata">

**Author:** ![klogges](https://avatars.discourse-cdn.com/v4/letter/k/eb9ed0/32.png) [@klogges](https://forum.shopware.com/u/klogges)\
**Post date:** [27. Januar 2022 um 14:49 UTC](https://forum.shopware.com/t/loop-in-cms-block-component-twig/92631/3 "2022-01-27T14:49:28Z")

</div>

Hi Max\_Shop  
danke für die Antwort.  
Den Loop hatte ich per `{% for i in 1..12 %} … {% endfor %}` geschrieben.  
Macht es einen Unterschied ob man per {{ loop.index }} oder {{ i }} den Index ausgibt?

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [27. Januar 2022 um 15:00 UTC](https://forum.shopware.com/t/loop-in-cms-block-component-twig/92631/4 "2022-01-27T15:00:23Z")

</div>

Nein, es macht kein Unterschied aus.

Wieso dein erstes Beispiel nicht funktioniert ist mir nicht wirklich klar. Was für ein Fehler wird denn bei folgendem geworfen?

```auto
<slot name="image-{{ i }}"></slot>

```

---

<div class="post-metadata">

**Author:** ![klogges](https://avatars.discourse-cdn.com/v4/letter/k/eb9ed0/32.png) [@klogges](https://forum.shopware.com/u/klogges)\
**Post date:** [28. Januar 2022 um 09:24 UTC](https://forum.shopware.com/t/loop-in-cms-block-component-twig/92631/5 "2022-01-28T09:24:22Z")

</div>

Statt des entsprechenden Slots wird nur ein leeres Element im HTML ausgegeben oder in anderen Schreibweisen die Twig-Brackets oder in der Console der Hinweis, dass die Variable slot nicht existiert (obwohl definitv per set gesetzt).

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [28. Januar 2022 um 10:39 UTC](https://forum.shopware.com/t/loop-in-cms-block-component-twig/92631/6 "2022-01-28T10:39:50Z")

</div>

Dieser Code erzeugt lediglich ein HTML-Tag, z.B.

`<slot name="image-1"></slot>`

Habe mich zu wenig damit beschäftigt. Entweder erfolgt das später dann per JavaScript oder du müsstest selbst schon per Variable dafür sorgen, dass der Slot mit Inhalt gefüllt wird. Ich tippe eher auf letzteres.

---

<div class="post-metadata">

**Author:** ![klogges](https://avatars.discourse-cdn.com/v4/letter/k/eb9ed0/32.png) [@klogges](https://forum.shopware.com/u/klogges)\
**Post date:** [28. Januar 2022 um 12:42 UTC](https://forum.shopware.com/t/loop-in-cms-block-component-twig/92631/7 "2022-01-28T12:42:28Z")

</div>

Der Slot wird natürlich durch das entsprechende Element (referenziert durch den definierten type) befüllt/ersetzt. Anscheinend aber wird das Twig nicht richtig geparst oder die Befüllung/Ersetzung findet statt bevor das Template geparst wurde. Das würde erklären warum der Loop ansich funktioniert, die Slots aber nicht.
