replaceAll benutzen um hochkommas zu filtern
Author: captFuture
Publication Date: 8/9/2012 17:54
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
-
Author: Peter_Jodeleit - 8/13/2012 8:21
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.
0 -
Author: captFuture - 8/13/2012 8:37
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 -
Author: Peter_Jodeleit - 8/13/2012 8:49
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").
0 -
Author: captFuture - 8/13/2012 9:31
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 -
Author: Peter_Jodeleit - 8/13/2012 10:20
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..
0 -
Author: captFuture - 8/13/2012 11:32
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 -
Author: feddersen - 8/14/2012 9:31
Nach folgendem Prinzip sollte es klappen:
$CMS_SET(tmp)$$CMS_VALUE(meinDOM)$$CMS_END_SET$
$CMS_VALUE(tmp.toString.replaceAll("a","b"))$
0 -
Author: captFuture - 8/20/2012 8:49
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 -
Author: marro - 8/20/2012 10:09
Verwende mal anstelle von replaceAll replace. Dann sollte es gehen.
0
Vous devez vous connecter pour laisser un commentaire.
Commentaires
9 commentaires