CMS_SET - Verwenden einer Variable als Bezeichner und Objekt

In einem CMS_SET-Befehl wäre es häufig wünschenswert, wenn man die Variable im Bezeichner auch im Objekt verwenden könnte, also bspw.:

$CMS_SET(myVar, myVar+1)$

Derzeit ist es notwendig, dass man hier eine "Zwischenvarbiable" erzeugt:

$CMS_SET(myVarTemp, myVar+1)$

$CMS_SET(myVar, myVarTemp)$

Die temporäre Variable bläht den Code unnötig auf und macht die Ausgabe insbesondere in großen Set-Bereichen unübersichtlicher.

4 Comments
hoebbel
Crownpeak employee
Crownpeak employee

Hab gerade mal folgendes in der aktuellen Version 4.2.454 ausprobiert:

$CMS_SET(sieben,4)$$CMS_SET(sieben,sieben+1)$$CMS_VALUE(sieben)$$CMS_SET(sieben,sieben+1)$$CMS_VALUE(sieben)$$CMS_SET(sieben,sieben+1)$

sieben=$CMS_VALUE(sieben)$

Ergebnis:

56 sieben=7

Werden hier vielleicht zwei verschiedene Kontexte benutzt (z.B. Seite und Absatz?)

rolf_siebachmey
I'm new here

Ich hatte das Problem nicht mehr genau im Kopf, so wie ich es oben beschrieben habe scheint es tatsächlich zu funktionieren (Entschuldigung dafür).

Das Problem tritt nur bei dieser Konstellation auf:

$CMS_SET(BEZEICHNER)$

  RUMPF DES VORLAGENFRAGMENTES

$CMS_END_SET$

Also bspw:

$CMS_SET(myVar, "Hallo")$

$CMS_SET(myVar)$$CMS_VALUE(myVar)$ Welt$CMS_END_SET$

$CMS_VALUE(myVar)$

Bei der Ausgabe von myVar läuft die Generierung in eine Endlosschleife, welche nach einiger Zeit abgebrochen wird.

hoebbel
Crownpeak employee
Crownpeak employee

Irgendwie hatte ich diese Antwort übersehen Smiley Sad

Hier müsste

$CMS_SET(myVar, "Hallo")$

$CMS_SET(myVar, myVar + " Welt")$

$CMS_VALUE(myVar)$

auch wieder funktionieren.

Nur die Verwendung von Templatefragmenten

$CMS_SET(var)$...$CMS_VALUE(var)$...$CMS_END_SET$$CMS_VALUE(var)$

führt zu Problemen. Das liegt aber daran, dass in diesen die inneren variablen nicht aufgelöst werden, sondern das das Templatefragement in der Variable gespeichert wird.

Der Vorteil dieses Verhaltens ist, dass dann natürlich soetwas möglich ist:

$CMS_SET(temp)$$CMS_VALUE(a)$$CMS_END_SET$

$CMS_SET(var,"a")$

$CMS_VALUE(a)$

$CMS_SET(var,"b")$

$CMS_VALUE(a)$

Ausgabe:

a

b

So kann man dann komplexe Templatefragment in einem CMS_SET erstellen, die bei jedem Aufruf ein potentiell anders Ergebnis erzeugen.

feddersen
Community Manager
Community Manager

Ich versuche die Situation noch mal zusammen zu fassen:

CMS_SET gibt es in zwei Ausprägungsformen.

Das einfache setzen einer Variable:

$CMS_SET(myVar, myVar+1)$

und die Verwendung als Templatefragment:

$CMS_SET(myFragment)$Mein Codeschnipsel, den ich an mehreren Stellen wiederverwenden/ausgeben möchte$CMS_END_SET$

In der ersten Variante kann die gewünschte Funktionalität verwenden werden. In der zweiten Variante, prinzipbedingt, nicht. Deswegen werde ich den diesen Feature Request auf "already offered" setzen.