[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