[TYPO3-german] Word-Formatierungen verbieten
Peter Linzenkirchner
liste at lisardo.de
Thu Aug 21 20:38:39 CEST 2008
Hallo Alexander,
Ich habe deine Mail hier sehr interessiert gelesen, da ich mit dem
gleichen Problem kämpfe und mich seit Tagen (!) in den RTE einarbeite.
So langsam fange ich an, ihn zu verstehen.
Allerdings klappt deine Einstellung bei mir überhaupt nicht, was
entweder an der Version liegt (ich verwende den RTE von TYPO3 Vs.
4.2.1) oder an den Voreinstellungen (Typical, Minimal etc.). Aber nach
umfangreichem Testen bin ich dem Problem näher gekommen.
Diese Zeile :
> RTE.default.enableWordClean.HTMLparser <
> RTE.default.proc.entryHTMLparser_db
löst die Transformation im IE unmittelbar nach dem Einfügen des
Wordtextes aus (also noch _vor_ dem Speichern, das ist schon mal sehr,
sehr gut und war die Ausgangsbasis meiner Tests.
ABER:
ich erhalte unmöglichen Tag-Salat, es bleiben nämlich Reste von Tags
im Code:
</span><//span> etc. und </font><//font>
und nach mehrmaligen Hin- und Herschalten zwsichen Wysiwyg und HTML-
Ansicht auch noch <//> etc. Nach dem Speichern stehen diese Tags dann
escaped auf der Seite oder - wenn ich das preserve ausschalte, eben
als Salat im Quelltext.
Ursache ist die Übernahme der folgenden Einstellungen in
RTE.default.proc.entryHTMLparser_db
- removeTags = font, ....
- span.fixAttrib.style.unset = 1
- span.rmTagIfNoAttrib = 1
es sind Einstellungen aus dem Preset für Typical, die mit deiner
obigen Zeile automatisch wirken.
Alle drei sind nicht nötig, da man das Gleiche erreichen kann, indem
man einfach allowTags passend definiert. Das ist wohl ein Bug der
neuen Version, um den man aber gut herumarbeiten kann. Ich habe also
deine Zeile
> RTE.default.enableWordClean.HTMLparser <
> RTE.default.proc.entryHTMLparser_db
ersetzt durch:
RTE.default.enableWordClean.HTMLparser {
allowTags (
a, abbr, acronym, address, blockquote, b, bdo, big, br, caption,
center, cite, code, col, colgroup, del, dfn, div, em, h1, h2, h3, h4,
h5, h6, hr, i, img, ins, kbd, li, link, ol, p, pre, q, samp, sdfield,
small, strike, strong, sub, sup, table, thead, tbody, tfoot, td, th,
tr, tt, u, ul, var
)
# das kann man noch wesentlich strenger fassen; aus Word kommen ja
nur wenige echte HTML-Tags.
# Um den Linksalat von Word zu verhindern, kann man z. B. Links
auch ausschalten.
tags {
p {
allowedAttribs = id, title, dir, lang, xml:lang, class
fixAttrib.align.unset = 1
# das ist wichtig, um die unsinngen style=Attribute
loszuwerden.
fixAttrib.style.unset = 1
}
# und anwenden auf alle Überschriften:
div < .p
h1 < .p
h2 < .p
h3 < .p
h4 < .p
h5 < .p
h6 < .p
}
}
Damit erreiche ich, dass unmittelbar nach dein Einfügen des Textes
folgende Transformierungen vorgenommen werden:
- die style-Atribute verschwinden aus allen hx
- die font-Tags und evtl. vorhandene span sind weg
- hx, p, b, i werden übernommen
Alle anderen Konvertierungen sind in
RTE.default.proc.entryHTMLparser_db definiert und finden deshalb erst
beim Speichern statt.
Scheint mir erstmal ziemlich perfekt zu funktionieren. Endlich!
Diese Einstellung unterscheidet sich auch noch in anderer Hinsicht von
RTE.default.proc.entryHTMLparser_db: dort ist nämlich das style-
Attribut bei p, div und hx erlaubt, ausserdem natürlich der span-Tag,
er muss ja abgespeichert werden.
Eigentlich ist das perfekt zu Konfigurieren, wenn man es mal kapiert
hat :-)
Viele Grüße
Peter
-----------------------------------------
Ach ja, ich poste ebenfalls mal meine Konfiguration:
Grundeinstellung der Extension im Extensionmanager:
Default Configuration Settings: Typical
Enable Additional inline Elements aktiv
Enable Images aktiv
Enable Compressed Scripts aktiv
## Default RTE configuration
RTE.classes {
# Blockstile
# ACHTUNG: wegen eines Fehlers in Safari _müssen_ die Klassen in
# konsequenter Kleinschreibung definiert werden!!
csc-frame-rulerbefore {
name = Linie davor
value =
}
# snip, sind unwichtig.
# Tabellenstile
# Textauszeichnungen
# folgen.
}
## Linkdefinitionen
RTE.classesAnchor {
externalLink {
class = external-link
type = url
titleText = LLL:EXT:rtehtmlarea/htmlarea/plugins/TYPO3Link/
locallang.xml:external_link_titleText
}
# snip, sind unwichtig.
}
RTE.default {
# bei mir unwichtig, aber wenn man Schriftauswahl zulässt, verwendet
Firefox damit
# CSS anstatt den font-Tag. Der IE bleibt aber beim Font-Tag,
insofern bringts eigentlich nichts.
useCSS = 1
# das folgende ist jetzt wichtig ...
enableWordClean = 1
removeTrailingBR = 1
removeComments = 1
removeTags = center, font, o:p, sdfield, strike, u
removeTagsAndContents = style, script
defaultLinkTarget =
# alle Buttons ein, danach alle unerwünschten
ausschalten.
showButtons = *
hideButtons (
lefttoright, righttoleft, formattext, bidioverride, big,
citation, definition, insertedtext, italic, keyboard,
monospaced, sample, small, span, strikethrough,
variable, user, bold, underline, fontstyle, fontsize,
blockquote, insertparagraphbefore, insertparagraphafter,
spellcheck, emoticon, inserttag, copy, cut, paste,
justifyfull, textcolor, bgcolor,
)
## Button-Gruppen bilden
keepButtonGroupTogether = 1
## Statusbar - die ist genial.
showStatusBar = 1
## selten genutzte Tags in der Absatzpalette verbergen: ganz nach
Gusto :-)
hidePStyleItems = pre,address,h5,h6,div
## ignoriert alle InlineStyles => für externes Stylesheet.
ignoreMainStyleOverride = 1
# CSS-Datei für den RTE - einfach die Haupt-CSS-Datei übernehmen.
# Bin zu faul für eine eigene CSS-Datei für den RTE
contentCSS=fileadmin/css/screen/content.css
proc {
# jetzt folgen die Transformationsregeln, die beim Speichern wirken.
# etliche sind überflüssig, da sie durch Typical bereits eingestellt
sind. Aber
# um nicht immer nachschauen zu müssen, werden sie wiederholt.
dontConvBRtoParagraph = 1
preserveDIVSections = 1
allowTagsOutside = hr, address
# Da muss jetzt der span-Tag rein ...
allowTags (
a, abbr, acronym, address, blockquote, b, bdo, big, br, caption,
center, cite, code, col,
colgroup, del, dfn, div, em, h1, h2, h3, h4, h5, h6, hr, i, img,
ins, kbd, li, link,
ol, p, pre, q, samp, sdfield, small, span, strike, strong, sub,
sup, table, thead, tbody, tfoot,
td, th, tr, tt, u, ul, var,
)
# alle Klassen, die im RTE benutzt werden sollen, müssen hier
erlaubt werden,
# sonst werden sie beim Speichern raustransformiert.
allowedClasses (
align-left,align-center,align-right,csc-frame-rulerbefore,csc-frame-
rulerafter,
csc-frame-indent,csc-frame-frame1,csc-frame-frame2,
kleinertext, grossertext,
contenttable-1,contenttable-2, layout
external-link, external-link-new-window, internal-link, internal-
link-new-window, download, mail,
component-items, action-items,
component-items-ordered, action-items-ordered,
serifen, starkebetonung, betonung, hellgrau, dunkelgrau,
)
# OK, jetzt gehts ins Detail: Tag für Tag die passende
Transformationsvorschrift:
entryHTMLparser_db = 1
entryHTMLparser_db {
tags {
p {
allowedAttribs = id, title, dir, lang, xml:lang, class
# ok, raus mit align, veraltet
fixAttrib.align.unset = 1
# und weg mit den style="" Definitionen; die will ich nicht erlauben
# da ich alles über eigene Klassen erledige. Funktioniert in
keinem Browser richtig ...
fixAttrib.style.unset = 1
}
# und übertragen auf alle wesentlichen Blockdefinitionen.
# Mal schauen, ob ich das evtl. noch für img und ul/ol erweitern
muss.
div < .p
h1 < .p
h2 < .p
h3 < .p
h4 < .p
h5 < .p
h6 < .p
# b und i mappen zu strong und em; das sind Relikte aus Word, die
in verschiedenen
# Browsern entstehen (IE + Safari, glaube ich)
b.remap = strong
i.remap = em
}
}
}
# nur Klassen mit Tags erlauben/verbieten. z. B. : p.klasse {border:
1px solid #ccc}
# da ich mein Haupt-Stylesheet verwende, verbiete ich Klassen ohne
Tags, sonst gibts Salat in den Menüs ...
showTagFreeClasses=0
# hier wird definiert, welche Klassen den Redakteuren zur
# Verfügung gestellt werden: die vorhandenen Klassen für die
# Zeichenformatierung werden hier ausgeschaltet:
classesParagraph (
# snip, unwichtig. Alle KLassen nennen!
csc-frame-rulerbefore
)
classesCharacter (
# snip, unwichtig. Alle KLassen nennen!
starkebetonung
)
# Klassendefinition für die gesamte Tabelle
classesTable = contenttable-1,contenttable-2
# Klassendefinition für die einzelnen Zellen
# das kann für tr, thead, tbody ebenfalls gemacht werden
classesTD = hellgrau1, dunkelgrau1
classesLinks = external-link, external-link-new-window, internal-
link, internal-link-new-window, download, mail
classesAnchor = external-link, external-link-new-window, internal-
link, internal-link-new-window, download, mail
classesAnchor.default {
page = internal-link
url = external-link-new-window
file = download
mail = mail
}
# Das sind Definitionen aus den Grundeinstellungen, die ich noch
nicht richtig kenne ...
# Lasse ich stehen, damit ich sie nicht vergesse.
#!
## Remove the following fieldsets from the properties popups
disableAlignmentFieldsetInTableOperations = 1
disableSpacingFieldsetInTableOperations = 1
disableColorFieldsetInTableOperations = 1
disableLayoutFieldsetInTableOperations = 1
## Show borders on table creation
buttons.toggleborders.setOnTableCreation = 1
}
# Das hier löst die Transformation und Code-Bereinigung im IE nach dem
Einfügen des Textes aus.
# die Definition weicht etwas ab von der beim Speichern weiter oben:
RTE.default.enableWordClean.HTMLparser {
# Die Tags a, span, font fehlen und werden deshalb entfernt
allowTags (
abbr, acronym, address, blockquote, b, bdo, big, br, caption,
center, cite, code, col,
colgroup, del, dfn, div, em, h1, h2, h3, h4, h5, h6, hr, i, img,
ins, kbd, li, link,
ol, p, pre, q, samp, sdfield, small, strike, strong, sub, sup,
table, thead, tbody, tfoot,
td, th, tr, tt, u, ul, var
)
tags {
p {
allowedAttribs = id, title, dir, lang, xml:lang, class
fixAttrib.align.unset = 1
fixAttrib.style.unset = 1
}
div < .p
h1 < .p
h2 < .p
h3 < .p
h4 < .p
h5 < .p
h6 < .p
}
}
# Übergabe der Einstellungen an den RTE fürs Frontend
RTE.default.FE < RTE.default
RTE.default.FE.showStatusBar = 0
RTE.default.FE.hideButtons = chMode, blockstyle, textstyle, underline,
strikethrough, subscript, superscript, lefttoright, righttoleft, left,
center, right, justifyfull, table, inserttag, findreplace,
removeformat, copy, cut, paste
RTE.default.FE.userElements >
RTE.default.FE.userLinks >
RTE.default.FE.proc < RTE.default.proc
# Wieder Regeln aus den Grundeinstellungen, sind nicht nötig, da sie
eh gelten.
RTE.config.tt_content.bodytext >
RTE.config.tt_content.bodytext.proc.overruleMode = ts_css
RTE.config.tt_content.bodytext.types.text.proc.overruleMode = ts_css
RTE.config.tt_content.bodytext.types.textpic.proc.overruleMode = ts_css
More information about the TYPO3-german
mailing list