Skip to main content

CMS_SET auf <null> setzen?

Comments

2 comments

  • Holger Höbbel

    Hallo,

    wenn in einem CMS_SET <nichts> steht, dann ist es auch leer.

    Das Problem beim "großen" CMS_SET ist, dass dort immer das entsprechende Templatefragment drin steht, es also nie leer ist.
    Lösung: Das Templatefragment entsprechend auswerten (mittels eval()):

    $CMS_SET(set_emptyFragment)$
    $CMS_IF(false)$
    do something
    $CMS_END_IF$
    $CMS_END_SET$
    $CMS_VALUE(set_emptyFragment.isEmpty())$<br>
    $CMS_VALUE(eval(set_emptyFragment).isEmpty())$<br>

    Aber wie man schnell sieht, wenn man den Code oben ausprobiert, ist das Ergebnis wieder beide Male false.

    Das liegt daran, dass in dem CMS_SET ja noch die Umbrüche (und Einrückungen) aus dem Code stehen, es also tatsächlich nicht leer ist. Also muss man im Code noch dafür sorgen, dass die Whitespaces nicht in der Variable gespeichert werden:

    $CMS_SET(set_emptyFragment)$$--
     --$$CMS_IF(false)$
     do something
     $CMS_END_IF$$--
    --$$CMS_END_SET$
    $CMS_VALUE(set_emptyFragment.isEmpty())$<br>
    $CMS_VALUE(eval(set_emptyFragment).isEmpty())$<br>

    Das funktioniert dann zwar so wie gewünscht, aber der Code wird unleserlich.

    Jetzt kann man das ausgewertete Templatefragment noch zu einem String umwandeln und diesen trimmen, anstatt die Whitespaces im Code auszukommentieren.

    Insgesamt klingt es für mich aber so, als wäre dies der falsche Weg. Leider hat Du den Anwendungsfall nicht beschrieben, so dass es schwierig ist, hier eine sinnvolle Lösung zu schreiben. Evtl. kann man auch eine Hilfsvariable definieren und diese Abfragen?

    Viele Grüße
    Holger

    P.S.: $CMS_VALUE("".isEmpty())$ liefert bei mir TRUE

    1
  • Monday Webforms Customer Care

    Hallo Holger,

    danke für die Antwort! Ich habe - wie so oft - meine Lösung selbst gefunden, kurz nach dem ich hier gepostet habe.

    Wie du sagt ist das Problem die Zeilenumbrüche bzw. das man den Set erst auswerten muss (z.b. mit toString()) bevor man isEmpty darauf loslassen kann.

    Meine Lösung ist jetzt so, dass ich im ersten Schritt dem set_var direkt den Leerstring übergebe mit CMS_SET(set_var, "")
    Und dann per CMS_IF die anderen möglichen Fälle abdecke.
    So bekomme ich zuverlässig einen Leerstring der dann - wie du korrekt gesagt hast - auf isEmpty() TRUE zurückliefert.
    Meine vorherige Annahme, dass "".isEmpty() == FALSE ist, war falsch. Da muss damals ebenfalls etwas falsch evaluiert worden sein wie hier in diesem Fall.

     

    $CMS_SET(set_var, "")$
    $CMS_IF(!st_ref.isEmpty())$
    $CMS_SET(set_var)$
    $CMS_IF(st_ref.getSection().isEmpty())$
    $CMS_REF(st_ref)$
     $CMS_ELSE$
    $CMS_REF(st_ref)$#$CMS_VALUE(st_ref.getSection().getId())$
    $CMS_END_IF$
     $CMS_END_SET$
    $CMS_END_IF$
    0

Please sign in to leave a comment.