captFuture
I'm new here

replaceAll benutzen um hochkommas zu filtern

Hallo :smileygrin:

Ich versuche gerade aus einer Datenquelle valide Json files zu generieren die in einzelnen eingabekomponenten CMS_INPUT_DOM verwenden und dort können auch links angelegt sein. beim lesen der dateien stört sich javascript natürlich an den hochkommas und umbrüchen im inhalt.

Die Umbrüche entferne ich mit CMS_TRIM, aber bei den Hochkommas bin ich ratlos weil die syntax nicht akzeptiert wird.

Mein Beispiel:

$CMS_IF(#cs.isFirstContentRow)${"addon":[ {

$CMS_ELSE$

{

$CMS_END_IF$

"name":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.name.replaceAll("", ""), default:"")$$CMS_END_TRIM$",

"item_id":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.ITEM_ID, default:"")$$CMS_END_TRIM$",

"shortdesc":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.shortdesc.replaceAll("", ""), default:"")$$CMS_END_TRIM$",

"longdesc":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.longdesc.replaceAll("", ""), default:"")$$CMS_END_TRIM$"

$CMS_IF(!#cs.isLastContentRow)$

},

$CMS_ELSE$

]}}

$CMS_END_IF$

Meine Vermutung war dass #row.name.replaceAll("\"", "\\"") funktionieren würde um aus einem " ein \" zu machen, dem ist aber leider nicht so.

Selbst bei einem funktionierenden replacing von beispielsweise #row.name.replaceAll(" ", "-") ist die ausgabe plötzlich leer was aber nur bei INPUT_DOM passiert -> der name ist beispielsweise ein INPUT_TEXT und da funktioniert das testreplacing

Bitte um Hilfe

LG Chris

11 Replies
Peter_Jodeleit
Crownpeak employee

Müsste da nicht replaceAll("\"", "\\\"") gemacht werden (3 Backslashes, der erste escaped den 2. Backslash, der 3. das doppelte Hochkommata)?!

Deine Variante ist syntaktisch falsch, was in den "Fehlern der Vorschau" angezeigt werden müsste.

Peter
0 Kudos

Der syntaxfehler wurde natürlich angezeigt und ich hab ihn mitlerweile schon korrigiert (danke für die Hilfe)... Leider kommt nun aber nichts mehr zur Anzeige.

$CMS_IF(#cs.isFirstContentRow)${"addon":[ {

$CMS_ELSE$

{

$CMS_END_IF$

"item_id":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.ITEM_ID, default:"")$$CMS_END_TRIM$",

"name":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.name, default:"")$$CMS_END_TRIM$",

"shortdesc":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.shortdesc.replaceAll("\"", "\\\""), default:"")$$CMS_END_TRIM$",

"longdesc":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.longdesc.replaceAll("\"", "\\\""), default:"")$$CMS_END_TRIM$"

$CMS_IF(!#cs.isLastContentRow)$

},

$CMS_ELSE$

}

]}

$CMS_END_IF$

bei shortdesc und longdesc ist im generierten file alles leer.

0 Kudos

Da kann ich "aus der Ferne" nicht viel zu sagen. Wenn bei "Fehler der Vorschau" jetzt nichts mehr angemeckert wird könnte ich mir nur noch vorstellen, das der "default" Fall von $CMS_VALUE zuschlägt (der ist ja auch "leer").

Peter
0 Kudos

Ich hab keine Fehler in der Vorschau, das ist richtig. Was mich sehr stutzig macht ist, dass es bei INPUT_TEXT sehrwohl funktioniert und bei INPUT_DOM eben nicht. (bei beiden ist der default wert leer)

0 Kudos

Ok, hatte im Beitrag das CMS_INPUT_DOM überlesen. "replaceAll" ist auf String definiert, CMS_INPUT_DOM liefert aber keinen String. D.h. da muss zunächst die String-Konvertierung durchgeführt werden. Wie das funktioniert, wurde in der Community schon mal erkärt. Bitte mal die Suche bemühen..

Peter
0 Kudos

Suche und auf basis dessen Diverseste Versuche bringen mir leider nicht das gewünschte ergebnis:

"longdesc":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.longdesc, default:"")$$CMS_END_TRIM$",

liefert -> "longdesc":"<p>Ausgenommen ... vorbehalten. <a href="....pdf" target="">Kompatible</a></p>",

"longdesc":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.longdesc.toText(true).replaceAll("\"", "\\\""), default:"")$$CMS_END_TRIM$",

liefert -> "longdesc":"<p>Ausgenommen ...vorbehalten. <a href="#" linkid="0297c57c-6bc8-4860-b1fc-212e716a61f4">Kompatible</a></p>",

"longdesc":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.longdesc.toText(false).replaceAll("\"", "\\\""), default:"")$$CMS_END_TRIM$"

liefert -> "longdesc":"Ausgenommen ...vorbehalten. Kompatible"

"longdesc":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.longdesc.toString, default:"")$$CMS_END_TRIM$"

liefert -> "longdesc":"de.espirit.firstspirit.access.editor.value.DomElementImpl@495f3eb0"

"longdesc":"$CMS_TRIM(level:4)$$CMS_VALUE(#row.longdesc.toString.replaceAll("\"", "\\\""), default:"")$$CMS_END_TRIM$"

liefert -> "longdesc":"de.espirit.firstspirit.access.editor.value.DomElementImpl@17a4988c"

0 Kudos

Nach folgendem Prinzip sollte es klappen:

$CMS_SET(tmp)$$CMS_VALUE(meinDOM)$$CMS_END_SET$

$CMS_VALUE(tmp.toString.replaceAll("a","b"))$

Fehler bekomm ich jetzt keinen mehr und die ausgabe ist auch nicht leer, das replacement funktioniert jedoch nicht.

$CMS_SET(tmplong)$$CMS_TRIM(level:4)$$CMS_VALUE(#row.longdesc)$$CMS_END_TRIM$$CMS_END_SET$

"longdesc":"$CMS_VALUE(tmplong.toString.replaceAll("a","A"))$"

FUNKTIONIERT und tauscht a gegen A

$CMS_SET(tmpshort)$$CMS_TRIM(level:4)$$CMS_VALUE(#row.shortdesc)$$CMS_END_TRIM$$CMS_END_SET$

"shortdesc":"$CMS_VALUE(tmpshort.toString.replaceAll("\"","\\\""))$",

FUNKTIONIERT NICHT - tauscht nichts aus

0 Kudos
marro
Crownpeak employee

Verwende mal anstelle von replaceAll replace. Dann sollte es gehen.