String an n-tem Seperator teilen

Hallo miteinander,


ich musste nun schon häufiger die ersten (oder auch mal die letzten) n Werte aus einem komma-getrennten String rausholen. Hab das dann kurzerhand als Funktion implementiert, bevor man es jedesmal aufs neue schreibt.

Das ganze ist im Grund eine gedopte Variante von keep_before(_last) und keep_after(_last).


Hier der Link zum Code.


Die Funktion erwartet bis zu 4 Parameter.

  1. Der zu trennende Text
  2. (default=',') Das Trennzeichen
  3. (default=1) Am wievielten Trennzeichen getrennt wird (1-based indexing!)
  4. (default=false) Bei true wird der Teil rechts vom angegebenen Trennzeichen zurückgegeben

Der dritte Parameter akzeptiert auch negative Zahlen. Damit kann man die Trennzeichen von hinten auswählen (-1=last,-2=last-1,...).


Vielleicht kann ja jemand anders mit der Funktion auch was anfangen.




Kleiner Hinweis am Rande für das Synesty-Team: Auf dem Dashboard werden grade keine Forumbeiträge angezeigt. Die Anfrage gibt immer nur 'Forum content could not be loaded. Try again later.' zurück.

Mir ist grade erst aufgefallen, dass die Exportfunktion für Snippets ja schon verfügbar ist. Hier noch ein json-Export des Snippets.

Vielen Dank.

Kannst du evtl. noch ein Anwendungsbeispiel schildern, wo du die Funktion eingesetzt hast?

Ein Anwendungsbeispiel ist beispielsweise unsere Leuchtmittelempfehlung. Das ist ein Attribut, der eine komma-getrennte Liste an SKUs enthälte. Jede der SKUs ist eben ein Leuchtmittel, welches zu dem Produkt passt.

Die Anzahl der enthaltenen SKUs variiert stark. Das Feld kann leer sein, oder auch bis zu 10 SKUs enthalten.


In manchen Ausgabekanälen sollen jetzt nur 3 Leuchtmittelempfehlungen angegeben werden. Also der Text soll bis vor dem dritten Komma übernommen werden.


Ein Funktionaufruf à la

<#assign liste_an_sku = 'sku1,sku2,sku3,sku4,sku5'>
${partition(liste_an_skus,',',3)}

ersetzt das Arbeiten mit einer Liste. Vorher habe ich das mit einem Code wie dem folgenden gelöst:

<#list liste_an_sku!?split(',') as sku>
${sku}
<#if sku?counter gt 2><#break></#if> <#-- Abbruchbedingung -->
<#sep>,
</#list>


Super, danke.