tlegat
I'm new here

CMS_REF dynamisch befüllen

Jump to solution

Hallo,

ich habe folgenden Anwendungsfall: Abhängig von äußeren Faktoren muss ich in meinem Template ein CMS_REF mit unterschiedlichen Werten befüllen. Da ich diese Parameter auch noch in einem Render-Skript weiterverarbeiten muss, würde ich sie gerne als Objekt übergeben und dann zu einem CMS_REF zusammenbauen. Das scheint jedoch nicht zu gehen.

Beginnend mit meinem <img> Element rufe ich ein Renderskript auf, um eine Abstraktionsebene für weitere Verwendung der <img> Eigenschaften zu haben (in meinem Fall für srcset):

<img $CMS_RENDER(template:"render_img_srcset_sizes", image: for_referredMedia.imageFile, abs:1, res: set_textImageSmall)$ />

Bisher habe ich versucht, die Inhalte von CMS_REF über Strings zusammenzusetzen:

$CMS_SET(set_remote,     if(!set_isRemote.isEmpty , ", remote:\"" + set_isRemote + "\"", ""))$

...

$CMS_REF(set_media + set_abs + set_res + set_remote)$

Ich will nur die übergebenen Parameter setzen. Leider erhalte ich bisher nur sinnvolle Ergebnisse, wenn ich alle Parameterwerte setze und im ref(), bzw. CMS_REF die einzelnen Parameter nenne und ihnen die Werte zuweise.

$CMS_SET(set_reference,    ref(media:set_image, remote: set_isRemote, res: for_res, abs:set_abs))$

Das ist fehlerbehaftet, weil ich ungesetzte Parameter mit Standardwerten auffüllen muss. Im besonderen Fall von remote muss ich sogar eine Unterscheidung vornehmen, weil remote immer auf ein existierendes Remote-Projekt verlinken muss und immer bedeutet, dass der Link remote ist.

Ich habe auch versucht, ein Objekt zu übergeben, beides ohne Erfolg.

$CMS_SET(set_previewImage, {media:"press_fallback_pmi", abs:1, res: set_previewResolution, remote:"ZF_GlobalContent"})$

$CMS_REF(set_previewImage)$

Gibt es keine Möglichkeit, CMS_REF dynamisch aus einem Objekt/Variablen zusammenzusetzen?

Vielen Dank vorab,

Tibor

1 Solution

Accepted Solutions
mikula
Crownpeak employee

Hallo Tibor,

ich habe das Ganze nun mal durchgespielt und ich denke die Lösung sollte ganz einfach sein:

Setze als "default"-Wert überall null.

Zum Beispiel so:

$CMS_SET(set_media, null)$

$CMS_SET(set_language,null)$

$CMS_SET(set_remote,null)$

$CMS_SET(set_res,null)$

Dies sollte zwar nicht nötig sein, da FS Variablen mit null initialisiert, aber sollte auch keinen Schaden anrichten. Für jedes Deiner "möglicherweise gesetzten" Felder musst du prüfen ob es einen Wert enthält. Wenn es einen enthält, kopierst du diesen entsprechend in die dafür vorbereitete Variable.

if(!set_isRemote.isEmpty){

$CMS_SET(set_remote,set_isRemote)$

}

Zum Schluss erstellst Du eine ref:

$CMS_REF(media: set_media,

  language:set_language,

   remote: set_remote,

  res:set_res

)$

Die null Werte sollten von FS ignoriert werden, daher sollten immer gültige referenzen entstehen. Ich hoffe das hilft Dir weiter, halte uns auf dem Laufenden

Viele Grüße

Martin

View solution in original post

3 Replies
mikula
Crownpeak employee

Hallo Tibor,

ich habe das Ganze nun mal durchgespielt und ich denke die Lösung sollte ganz einfach sein:

Setze als "default"-Wert überall null.

Zum Beispiel so:

$CMS_SET(set_media, null)$

$CMS_SET(set_language,null)$

$CMS_SET(set_remote,null)$

$CMS_SET(set_res,null)$

Dies sollte zwar nicht nötig sein, da FS Variablen mit null initialisiert, aber sollte auch keinen Schaden anrichten. Für jedes Deiner "möglicherweise gesetzten" Felder musst du prüfen ob es einen Wert enthält. Wenn es einen enthält, kopierst du diesen entsprechend in die dafür vorbereitete Variable.

if(!set_isRemote.isEmpty){

$CMS_SET(set_remote,set_isRemote)$

}

Zum Schluss erstellst Du eine ref:

$CMS_REF(media: set_media,

  language:set_language,

   remote: set_remote,

  res:set_res

)$

Die null Werte sollten von FS ignoriert werden, daher sollten immer gültige referenzen entstehen. Ich hoffe das hilft Dir weiter, halte uns auf dem Laufenden

Viele Grüße

Martin

Hallo Martin,

vielen Dank für Deine Antwort, ich probiere das diese Woche aus. Nullwerte kamen mir tatsächlich noch nicht in den Sinn.

0 Kudos

Hallo Martin,

das funktioniert, vielen Dank!

Zwar wirft FS nun noch Warnungen, aber mit denen können wir wahrscheinlich leben.

Die Warnungen stammten nicht von dieser Änderung...