#1

Andreas_B

Forum-Sponsor  (162 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 http://undefined.bplaced.net

Benutzereingabe in erweiterter Eigenschaft (typ: string) mittels sowas wie string.replace in CCML bearbeiten

Hallo zusammen,

ich habe eine erweiterte Eigenschaft vom Typ string, in welcher der Benutzer Text eingeben kann. Der eingegebene Text wird an anderer Stelle im Code eingefügt. Allerdings darf dieser Text bestimmte Zeichen wie z.B. Umlaute oder Leerzeichen oder sonstige Sonderzeichen nicht enthalten. Darum habe ich ein JavaScript geschrieben, welche ungültige Zeichen mittels einer string.replace Funktion ersetzt. Mir wäre es aber lieber, wenn diese Zeichen gar nicht erst in den Code kommen würden.

Aus diesem Grunde fragte ich mich, ob es möglich ist, mit CCML ebenfalls sowas wie ein string.replace (oder sowas in der Art) zu schreiben, so dass ungültige Zeichen beim Generieren der Seite schon ersetzt werden?

Meine erweiterte Eigenschaft:

<cc:property id="design.ddaccor.href" caption="href eingeben (only [a-Z|0-9|_|-] ü=ue etc.)" folder="0.5 Akkordeon" targettype="paragraph" type="string" default="must be entered!">

wird in der page.ccml wieder eingefügt:

<div class="balken"><div class="balkenclosed"><a id="<cc:print value="&para.properties.design.ddaccor.id">" style="text-decoration:none; color:black;" href="#<cc:print value="&para.properties.design.ddaccor.href">"><cc:print value="&para.properties.design.ddaccor.ueberschrift"></a></div></div>

Und hier das JavaScript dazu:

$('.balken > .balkenclosed > a, .balken > .balkenopen > a').each(function() {
 var self = $(this);
 var id = self.attr('id');
 var href = self.attr('href');
 if (id)
 self.attr('id', stripEverything(id, '_'));
 if (href)
 self.attr('href', '#'+stripEverything(href, '_'));
});

function stripEverything(string, replaceSpaceWith) {
 return string.replace(/\u00dc/g, 'Ue').replace(/\u00fc/g, 'ue').replace(/\u00c4/g, 'Ae').replace(/\u00e4/g, 'ae').replace(/\u00d6/g, 'Oe').replace(/\u00f6/g, 'oe').replace(/\u00df/g, 'ss').replace(/[^a-zA-Z^\d\^_ ]+/g, '').split(' ').filter(function(e) {
 return e
 }).join(replaceSpaceWith);
}

 

Testen kann man das ganze hier im pen: https://codepen.io/undefined999/pen/VyyQVw


Vielleicht hat ja einer von den CCML Profis hier eine Idee. 🙂


Vielen Dank und schöne Grüße
Andreas


[EDIT] bzw. würde ich gerne komplett auf die User-Eingabe verzichten und den href- und id-Wert aus der Überschrift nehmen und diesen Wert dann mit sowas wie einer string.replace Funktion in CCML bearbeiten. Aber ich glaube nicht, dass das möglich ist. [/EDIT]

#2

Thomas

Moderator  (2298 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 https://siquando-designs.de

#3

Andreas_B

Forum-Sponsor  (162 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 http://undefined.bplaced.net

Hallo Thomas,

vielen Dank für deine Antwort.

Ja, das javascript in php nachzubauen wäre meine zweite Wahl gewesen.

Also gibt es in CCML keine Möglichkeit, den user input in irgendeiner Art und Weise zu filtern/bereinigen, richtig?

Danke und schöne Grüße

 

 

 

#4

Volker W.

Administrator  (7794 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 https://www.warmers.de  ·   vwarmers  ·   vwarmers  ·   volkerw68

#5

Andreas_B

Forum-Sponsor  (162 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 http://undefined.bplaced.net

Hallo Volker,

vielen Dank für deine Antwort 🙂

Die CCML Tutorials habe ich schon einige Male gelesen. Sie erschienen mir nur immer so kurz, so dass ich bisher davon ausgegangen bin, dass diese nicht alle Funktionen/Möglichkeiten der Sprache beinhalten würden.


Vielen Dank nochmal und schöne Grüße

257 Aufrufe | 5 Beiträge