An dieser simplen Aufgabe bin ich einige Zeit gesessen. Wenn man z.B. im DCE für die Backend-Fields die Möglichkeit braucht mehrere Optionen auszuwählen.
Die Aufgabenstellung bei mir war:
Für eine Gruppe von Autohäusern stehen drei Automarken zu Verfügung. Für jeden Standort sollten die angebotenen Marken am Standort gewählt werden können.
Ich habe das Content Element mit der Extension DCE, die ich wirklich gerne verwende, erstellt. Als Feld habe ich ein Select-Feld verwendet, definiert als manuelle Liste mit drei Einträgen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<config> <type>select</type> <items type="array"> <numIndex index="0" type="array"> <numIndex index="0">Peugeot</numIndex> <numIndex index="1">0</numIndex> </numIndex> <numIndex index="1" type="array"> <numIndex index="0">Citroen</numIndex> <numIndex index="1">1</numIndex> </numIndex> <numIndex index="2" type="array"> <numIndex index="0">Mazda</numIndex> <numIndex index="1">2</numIndex> </numIndex> </items> <minitems>0</minitems> <maxitems>3</maxitems> <dce_load_schema>1</dce_load_schema> </config> |
Im Fluidtemplate wollte ich die Abfrage mittels einem IF-Konstrukt lösen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<f:if condition="{field.hersteller} == 0"> <f:then> <img src="fileadmin/templates/pics/peugeot-logo.svg" /> </f:then> </f:if> <f:if condition="{field.hersteller} == 1"> <f:then> <img src="fileadmin/templates/pics/citroen-logo.svg" /> </f:then> </f:if> <f:if condition="{field.hersteller} == 2"> <f:then> <img src="fileadmin/templates/pics/mazda-logo.svg" /> </f:then> </f:if> |
Das klappte aber nicht – hat die manuelle Liste des Elementes mehr als zwei Optionen lässt sie sich mittels Fluid IF so nicht mehr abfragen. (Bei zwei Optionen kann auf wahr/falsch abgefragt werden.)
Und das klappte deswegen nicht, da ein Fluid-Debug zeigte, dass die Variable kein Array ist, sondern ein String:
1 |
hersteller => '0,1,2' (5 chars) |
Die Lösung:
Um diesen String nun umzuwandeln hilft dce:explode (danke an die Hilfe von Armin und Erik im #dce-Channel von Slack):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<f:for each="{field.hersteller -> dce:explode(delimiter:',')}" as="autologos"> <f:if condition="{autologos} == 0"> <f:then> <img src="fileadmin/templates/pics/peugeot-logo.svg" /> </f:then> </f:if> <f:if condition="{autologos} == 1"> <f:then> <img src="fileadmin/templates/pics/citroen-logo.svg" /> </f:then> </f:if> <f:if condition="{autologos} == 2"> <f:then> <img src="fileadmin/templates/pics/mazda-logo.svg" /> </f:then> </f:if> </f:for> |
Namespace nicht vergessen:
{namespace dce=ArminVieweg\Dce\ViewHelpers}