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="¶.properties.design.ddaccor.id">" style="text-decoration:none; color:black;" href="#<cc:print value="¶.properties.design.ddaccor.href">"><cc:print value="¶.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]