jammin
Occasional Observer

Problem mit CMS_SET und leeren Werten aus Cookies

Wir haben ein Problem mit der Verarbeitung einer CMS_SET Variablen in FirstSpirit, wenn ein Cookie-Wert nicht gesetzt ist. Unser Ziel ist es, einen Hash-Wert aus einem Cookie (MY.COOKIE) zu speichern und nur dann in der Ausgabe zu verwenden, wenn er tatsächlich existiert.

Unser Code:

 

$CMS_SET(set_email_hash)$${cookie != null && cookie["MY.COOKIE"] != null ? cookie["MY.COOKIE"].value : null}$CMS_END_SET$

$CMS_IF(set_email_hash != null && set_email_hash.toString() != null && !set_email_hash.toString().equals(""))$
'hashedUserData': {
    'sha256': {
        'email': '$CMS_VALUE(set_email_hash, default:"")$'
    }
}
$CMS_END_IF$

 

Erwartetes Verhalten

Wenn MY.COOKIE nicht gesetzt ist, sollte der JSON-Block nicht ausgegeben werden.

Tatsächliches Verhalten

Auch wenn der Cookie nicht existiert, wird folgender JSON-Block ausgegeben:

 

'hashedUserData': {
    'sha256': {
        'email': ''
    }
}

 

Debug-Ergebnisse

Um das Problem weiter zu untersuchen, haben wir den Wert von set_email_hash geprüft:

DEBUG: isEmpty() = 'false'
DEBUG: toString() = ''
DEBUG: getClass() = de.espirit.firstspirit.parser.impl.TemplateDocumentImpl

Diverse Fragen tun sich auf:

Warum gibt TemplateDocument.toString() eine nicht-leere Zeichenkette zurück, obwohl die Ausgabe leer erscheint?

Gibt es eine empfohlene Methode, um sicherzustellen, dass ein TemplateDocument wirklich keinen Inhalt hat?

Hat jemand Ideen oder stand vielleicht bereits vor einem ähnlichen Problem?

Vielen Dank &
viele Grüße!

0 Kudos
1 Reply
hoebbel
Crownpeak employee

Hallo Jammin,

ich fürchte, dass hier ein Missverständnis bezüglich der Ausführungszeitpunkte vorliegt.

Der FirstSpirit Code wird ausgeführt, wenn die Seite generiert wird (also der html Quelltext erzeugt wird). Zu dem Zeitpunkt steht in der Variable "set_email_hash" das Templatefragment drin, dass dort definiert wurde, also der gesamte String zwischen dem öffnenden und schließendem $CMS_SET$ Tags. 

Die Prüfungen anschließend sind alle true, da in der Variable ja ein String drin steht, der weder null noch leer ist.

Ich nehme an, dass die Debug Ausgaben aus einem Browser stammen. Wenn Du statt dessen in den Quelltext der erzeugten html Seite schauen würdest, würdest Du sehen, dass dort in Wirklichkeit der js Code steht.

Oder anders formuliert - erst erzeugt FirstSpirit den Quellcode. Später wird dieser völlig unabhängig von FirstSpirit ausgeführt. Auf Ergebnisse dieser Ausführung hat FirstSpirit keinen Zugriff. 

[OK - das Frontend könnte theoretisch Daten zurück in FirstSpirit schreiben. Diese würden aber erst bei der nächsten Generierung berücksichtigt werden, spielen hier also keine Rolle.]

Viele Grüße
Holger

0 Kudos