Zum Inhalt springen

Sonderzeichen ersetzen

Erstellt am 7. Oktober 2009 · 16 Antworten · letzte Antwort am 27. November 2009

Tags: Frage

3d-swiss ·
    INHALT = CONTENT
    INHALT {
      table = tt_content
      select.orderBy = sorting
      select.where = colPos = 0
      table.20 = TEXT
      table.20 {
      field = bodytext
        select.split {
        token = ®
        cObjNum = |*|1|*|2
        1.current = 1
        1.noTrimWrap = ®| <sup class="reg">&reg;</sup> |
        2.current = 1
        }
       }
     }

Hallo zusammen,

ich möchte gerne ® und auch andere Sonderzeichen im Inhalt und auch später in Seitentitel, Überschriften ect. gegen eine andere Schreibweise ersetzen lassen.

Leider habe ich im Internet nur bruchstückhafte Lösungen gefunden, daraus ist der obige Versuch entstanden, der leider nichts verändert.

Was mache ich falsch?

Danke für`s Lesen und die Hilfe im Voraus.

Kilkenny ·

Hallo 3d-swiss,

ich habe in etwa das gleiche Problem wie Du. Ich kann dir folgendes anbieten, weiß nicht ob Dir das hilft.
Der Schnipsel:

tt_content.stdWrap.parseFunc.short {
  Italien = XXX
}

ersetzt in sämtlichen Überschriften, Inhaltselementen, tt_news-Elementen den Begriff Italien durch XXX. Nun ist das Problem, dass Sonderzeichen nicht funktionieren, denn genau das habe ich auch versucht.
Ich habe dem Kunden nun gesagt, er solle einfach nur den Firmennamen eingeben und ich ersetze diesen dann durch den Firmennamen mit dem Sonderzeichen, denn das funktioniert.

Also mach evtl. folgendes:

tt_content.stdWrap.parseFunc.short {
  Firmenname = Firmenname<sup class="reg">®</sup>
}
3d-swiss ·
tt_content.stdWrap.parseFunc.short {
  (R) = <sup class="reg">®</sup>
}

Wäre ne Lösung, aber ich weiss bei besten Willen nicht, wo ich diese Zeilen hinschreiben muss. #angry#

Drum habe ich es ja auch im Anfängerbereich gepostet: :-)

freshman17 ·

Hab eine kleine Extension (Key: regex) geschrieben. Mit dieser kann man den Quellcode (alles zwischen den Body-Tags) mit Regulären Ausdrücken "bearbeiten".

Syntax ist folgende:

patternI = /regulärer Ausdruck/
patternI.replacemant = Ersatztext

d.h. beliebig viele Ausdücke die sich nur im Index (I) unterscheiden.

Beispiel mit drei RegEx:

config.regex {
  pattern1 = /###name###/i
  pattern1.replacemant = ERSETZT

  #Das ® als HTML nur ohne Leerzeichen
  pattern2 = /& reg;/
  pattern2.replacemant = copyright
  
  #Kommentare entfernen
  pattern3 = /<!--.*-->/
  pattern3.replacemant = 
}
3d-swiss ·
   config.regex {
     #Das ® als HTML nur ohne Leerzeichen
     pattern1 = /&reg;/
     pattern1.replacemant = <sup>&reg;</sup>
   }

Ersetzt leider ® nicht durch ein hochgestelltes ®.

Zweiter Versuch:

   config.regex {
     # (R) umwandeln
     pattern1 = /(R)/
     pattern1.replacemant = <sup>&reg;</sup>
   }

Ersetzt ALLE grossen R (auch ohne Klammern) im Text und im Quellcode durch (®). Warum bleiben die Klammern sichtbar.
Wenn ich noch erfahren darf, wie ich nur (R) in Klammern ersetzen kann, dann wäre das eine gute Lösung für mich.

freshman17 ·

Noch nie mit Regulären Ausdrücken gearbeitet? Runde Klammern haben eine besondere Funktion, die mußt man "escapen"

versuchsmal so:

config.regex {
  # (R) umwandeln
  pattern1 = /\(R\)/
  pattern1.replacemant = <sup>®</sup>
}

Im Grunde genommen ist das die "preg_replace" - Funktion durch die man den Content "jagd"

PHP-Doku zu preg_replace:

http://de.php.net/manual/de/function.preg-replace.php

PS: Hast PN

Pewe_at ·

Danke für den Tipp!
Aberwie schreib ich die Story, wenn ich 2 Wörter - z.b "Max Mustermann" finden und "stylen" soll???
Die beiden Wörter stehen immer in der gleichen Reihenfolge und nur wenn Sie in der Kombination stehen....
lg Pewe

freshman17 ·

@Pewe_at:

z.B. so:

config.regex {
  # Wenn Gross- und Kleinschreibung eine Rolle spielt
  pattern1 = /Max Mustermann/
  # und wenn sie keine spielt so:
  # pattern1 = /Max Mustermann/i
  pattern1.replacemant = <span style="color: #ff0;">Max Mustermann</span>
}
Pewe_at ·

Nö! Hat leider auch keinerlei Wirkung gezeigt!

Ist da eventuel zusätzlich noch etwas notwendig, das ich ev. nicht im System haben könnte?

mfg Pewe_at

Pewe_at ·

Ne, das Script macht leider gar nichts!
Ich hab sogar den "Tippfehler" (replacemant ) auf replacement ausgebessert.... :o ...wenn's einer ist.... :o

Vom Alex hab ich noch Tipps bekommen, die beruhen allerdings auf eigenen Ext, die grundlegend was anderes machen sollten. Diese, eigentlich einfache Funktion klappt aber leider nicht. Ein "Wort" hab ich geschafft, bei 2 gehts nicht mehr.

lg Pewe

freshman17 ·

1. Saug dir neue Version (0.0.3)
2. Prüfe Unter Template->Constant Editor -> Category: PLUGIN.REGEX ob das Plugin aktiviert ist (1 muß da stehen)
3. Wie ist dein Leerzeichen zwischen Max und Mustermann definiert (& nbsp; ,& #160; oder implizites Leerzeichen)? Pattern Matching muß zu 100% stimmen sonst klappts nicht!!!

Versuch das (da ist ein Leerzeichen bei & nbsp; und bei & #160; welche du herausnehmen solltest:

config.regex {
  pattern1 = /\bMax(?:(?:& nbsp;)|\s|(?:& #160;))+Mustermann/
  pattern1.replacement = <span style="color: #ff0;">Max Mustermann</span>
}
Pewe_at ·

Jetzt hab ich das halbe System nochmal übergedreht, alles alte rausgeschmissen, deine regex 0.0.3 reingespielt und:

Es läuft so wie's sein soll! :p

Sogar der erste Versuch mit:

config.regex {
  # Wenn Gross- und Kleinschreibung eine Rolle spielt
  # pattern1 = /Max Mustermann/
  # und wenn sie keine spielt so:
    pattern1 = /Max Mustermann/i
    pattern1.replacement = <b>Max Mustermann</b>
}

läuft schon super! 😃

Der zweite Tipp mit:

config.regex {
  pattern1 = /\bMax(?:(?:& nbsp;)|\s|(?:& #160;))+Mustermann/
  pattern1.replacement = <span style="color: #ff0;">Max Mustermann</span>
}

sieht auf den ersten Blick :o etwas verwirrend aus, ist aber perfekt gelöst!

Ich nehme an, dass irgend einer der notwenigen Teile auf meinem Testsystem zerschossen war - sonst war ja irgendwas passiert...
Danke nochmal!
lg Pewe_at

fuss ·

Olla!

Anbei noch eine reine TS-Lösung - obwohl der Gedanke mit regEx arbeiten zu könen, auch sehr interessant ist 🙂.
Diese ersetzt den String CPRGHT mit < sup >®< /sup >

# replace CPRGHT with <sup>®</sup>
# headers
lib.stdheader.10.setCurrent.parseFunc.short.CPRGHT = <sup>®</sup>

# regular content
tt_content.text.20.parseFunc.short.CPRGHT = <sup>®</sup>

# menues
tt_content.menu.20.stdWrap.parseFunc.short.CPRGHT = <sup>®</sup>
lib.parseFunc.short {
 CPRGHT = <sup>®</sup>
}

#rte
lib.parseFunc_RTE.short {
 CPRGHT = <sup>®</sup>
}

gruss, fuss