xhtml Problem mit dem <em> TAG

Sundriver
Beiträge: 41
Registriert: Mo 21. Nov 2005, 17:06
Wohnort: BB
Kontaktdaten:

xhtml Problem mit dem <em> TAG

Beitrag von Sundriver » Mo 12. Nov 2007, 12:27

Hallo,

die SuFu hat mich zwar auf weitere Seiten wie z.B. auf diese hier http://wiki.moxiecode.com/index.php/Tin ... d_elements
geführt aber sie hat nicht wirklich geholfen mein Problem zu lösen.

Es geht um den <em> TAG , diesen möchte ich statt des bisher üblichen <i> italic Tags verwenden da er bei einem synthetisch gelesenem Text diese Textpassage mehr betont.

Wenn ich allerdings im Backend das ganze abspeichere wird dieser <em> Tag wieder zu einem <i> umgewandelt. Hier mal auszugsweise meine Mandanteneinstellung Sprachübergreifend 4.6.23:

Code: Alles auswählen

 generator	xhtml	true
      	wysiwyg	tinymce-valid-elements	*[*]
   	wysiwyg	tinymce-extended-valid-elements	*[*]
   	wysiwyg	tinymce-stylesheet-file	css/style_tiny.css
Den Workaround von Dodger77 http://contenido.org/forum/viewtopic.ph ... hlight=tag habe ich auch erledigt, klappt soweit ganz gut, wie gesagt lediglich der <em> tag macht mir im Moment Schwierigkeiten. Kennt irgendwer eventuell eine Lösung? Gibt es die Möglichkeit die in der oben genannten Website vorgestellten Rules in Contenido bzw dessen TinyMCE zu integrieren?

cu
Sundriver

wosch

Beitrag von wosch » Mo 12. Nov 2007, 14:20

Getestet mit 4.6.15 (ohne xhtml) und 4.6.23 (mit xhtml)

4.6.15: Im Tiny wird die Schaltfläche K für den Tag verwendet, gesetzt wird der Tag em

4.6.23: Im Tiny wird die Schaltfläche I für den Tag verwendet, gesetzt wird der Tag em

Und bei beiden bleibt der em-Tag erhalten und wird nicht ersetzt beim Speichern.

Sundriver
Beiträge: 41
Registriert: Mo 21. Nov 2005, 17:06
Wohnort: BB
Kontaktdaten:

Beitrag von Sundriver » Mo 12. Nov 2007, 15:33

Hallo wosch,

Ich hab die 4.6.23 ( von 4.6.15 geupdatet )und in den Mandanteneinstellungen auch Valides XHTML als Ausgabe eingestellt, hier mal mein Doctype vom Layout:

Code: Alles auswählen

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
...
Leider funktioniert es bei mir nicht, wenn ich eine Textpassage markiere und dann auf den "I " Button drücke generiert er tatsächlich ein <i> Tag :-( welches ich dann auch im Seitenquelltext des Browsers wiederfinde.

Werde mir mal eine reinrassige 4.6.23 installieren und das dort mal testen

cu
Sundriver

wosch

Beitrag von wosch » Mo 12. Nov 2007, 15:42

In der 4.6.15 ist die Tiny-Version Version 2.0.5.1 (2005-03-22)
in der 4.6.23 ist die Tiny-Version Version 2.1.1.1 (2007-05-14)

Bei einem Contenido-Update werden die Tiny-Version nicht ausgetauscht.
Vielleicht probiertst du einfach mal in deiner 4.6.23 den neuen Tiny einzuspielen was dann passiert.

Sundriver
Beiträge: 41
Registriert: Mo 21. Nov 2005, 17:06
Wohnort: BB
Kontaktdaten:

Beitrag von Sundriver » Mo 12. Nov 2007, 16:10

Also mit einer Jungfräulichen 4.6.23 klappt es auch nicht, <em> Words.. </em> wird wieder zu einem <i> Tag

Code: Alles auswählen

  <!--start:content-->
      <h1></h1>      
      <div><p>
<i>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis ligula lorem, consequat eget, tristique nec, auctor quis, purus. Vivamus ut sem. Fusce aliquam nunc vitae purus. Aenean viverra malesuada libero. Fusce ac quam. Donec neque. Nunc venenatis enim nec quam. Cras faucibus, justo vel accumsan aliquam, tellus dui fringilla quam, in condimentum augue lorem non tellus. Pellentesque id arcu non sem placerat iaculis. Curabitur posuere, pede vitae lacinia accumsan, enim nibh elementum orci, ut volutpat eros sapien nec sapien. Suspendisse neque arcu, ultrices commodo, pellentesque sit amet, ultricies ut, ipsum. Mauris et eros eget erat dapibus mollis. Mauris laoreet posuere odio. Nam ipsum ligula, ullamcorper eu, fringilla at, lacinia ut, augue. Nullam nunc.
</i>
</p>
<br />
</div>
      <!--end:content-->
Kannst du mir bitte sagen wo ich die Versionsnummer vom TinyMCE finde?

cu
Holger

wosch

Beitrag von wosch » Mo 12. Nov 2007, 16:16

Sundriver hat geschrieben:Kannst du mir bitte sagen wo ich die Versionsnummer vom TinyMCE finde?

cu
Holger
Als erste Zeile in der Datei changelog :wink:

Sundriver
Beiträge: 41
Registriert: Mo 21. Nov 2005, 17:06
Wohnort: BB
Kontaktdaten:

Beitrag von Sundriver » Mo 12. Nov 2007, 16:23

o.k. ist die Version 2.1.1.1 (2007-05-14) , ich hatte grad eben die tiny_mce_src.js offen, da stand es auch drin.

Hmm, das ist demnach schon die neue Version und es funktioniert trotzdem nicht.

//EDIT: also ich hab in den letzten Stunden ne Menge Material über den Tiny im www gefunden aber hab es noch nicht geschafft dieses Problem bei mir zu lösen.
Ich habe die oben geschilderten Einstellungen Sprachübergreifend erstellt und in dem deutschen Sprachteil habe ich bei den Mandanteneistellungen folgendes eingetragen:
wysiwyg tinymce-valid-elements em[class|style] aber alles ohne Erfolg, der Tiny macht einfach fleissig weiter aus <em> einen <i> Tag :-( Cache und con_code hab ich auch schon geleert, bin grad ziemlich Ratlos...
Haben die Cracks hier aus dem Forum eventuell noch ne Idee?

cu
Holger

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 13. Nov 2007, 00:00

Die Frage solltest Du (vermutlich) im Forum zum tinyMCE stellen. Schon mal versucht?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Sundriver
Beiträge: 41
Registriert: Mo 21. Nov 2005, 17:06
Wohnort: BB
Kontaktdaten:

Beitrag von Sundriver » Di 13. Nov 2007, 00:28

Nein, ich hab zwar in diesem Forum recht viel gelesen und auch versucht an den Rule Set's zu ändern aber direkt gefragt hab ich dort noch nicht.

Was mich irritiert ist, dass es bei wosch in der aktuellen 4.6.23 funktioniert und bei mir nicht. Hatte extra nochmal das neueste Release von contenido.org geladen und getestet aber es klappt nicht. Im Web scheint dieses Problem recht bekannt zu sein, bei WordPress Artikeln kannst du einiges in Google darüber erfahren aber die Lösung hat sich nicht gefunden.

Werde vermutlich morgen mal in dem Tiny Forum mein Glück versuchen.
Zuletzt geändert von Sundriver am Mi 14. Nov 2007, 00:10, insgesamt 1-mal geändert.
cu
Sundriver

Sundriver
Beiträge: 41
Registriert: Mo 21. Nov 2005, 17:06
Wohnort: BB
Kontaktdaten:

Lösung für das <em> und <strong> Tag Problem im

Beitrag von Sundriver » Mi 14. Nov 2007, 00:07

So, ich denke ich habe eine akzeptable Lösung für das Problem vom ersten Post in diesem Thread gefunden.

Es ist Browserübergreifend lediglich das Ergebniss im Seitenquelltext gleich, nicht jedoch die arbeitsweise vom Tiny.

Wenn ich im Firefox im Backend einen Text editiere und ihn in Emphasis Tags , also <em> setze macht der Editor daraus jedesmal einen Italic <i> Tag der nicht das gewünschte Ergebniss bei einer Wiedergabe des Textes in Sprachsynthese bringt. Ebenso macht er das mit <strong> Tags, aus diesen macht er <b> Tags. Wenn das Editing aber im IE passiert werden diese Tags, <em> und <strong> nicht verändert.

Die Ursache liegt in einer Funktion die ich im tinyMCE Sourcecode gefunden habe,

Code: Alles auswählen

// Convert all strong/em to b/i in Gecko
		if (tinyMCE.isGecko) {
			h = h.replace(/<embed([^>]*)>/gi, '<tmpembed$1>');
			h = h.replace(/<em([^>]*)>/gi, '<i$1>');
			h = h.replace(/<tmpembed([^>]*)>/gi, '<embed$1>');
			h = h.replace(/<strong([^>]*)>/gi, '<b$1>');
			h = h.replace(/<\/strong>/gi, '</b>');
			h = h.replace(/<\/em>/gi, '</i>');
	}
erst als ich diese Funktion aus der tini_mce.js rausgeschnitten habe hat das ganze auch mit dem Firefox funktioniert. Hier der Teil den ich ausgeschnitten habe:

Code: Alles auswählen

if(tinyMCE.isGecko){h=h.replace(/<embed([^>]*)>/gi,'<tmpembed$1>');h=h.replace(/<em([^>]*)>/gi,'<i$1>');h=h.replace(/<tmpembed([^>]*)>/gi,'<embed$1>');
h=h.replace(/<strong([^>]*)>/gi,'<b$1>');h=h.replace(/<\/strong>/gi,'</b>');h=h.replace(/<\/em>/gi,'</i>')}
Nun arbeitet der Firefox wie der IE, die Tags <em> <strong> <i> und <b> bleiben nun so wie sie im Editor gesetzt sind.
Bleibt für mich die Frage warum diese Funktion extra für den Gecko implementiert wurde..??
cu
Sundriver

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Mi 14. Nov 2007, 08:57

@Sundriver:

Es sieht ganz danach aus, als würde für Gecko-Browser intern mit <b> und <i> gearbeitet:

http://tinymce.moxiecode.com/punbb/view ... hp?id=8873

Durch die Bestandteile:

Code: Alles auswählen

strong/b
bzw.
für valid-elements/extended-valid-elements wird das beim Speichern wieder zurückgewandelt. Das funktioniert ohne Angabe von valid-elements/extended-valid-elements auch gut, da dies in der Standard-Konfiguration mit drin ist:

http://wiki.moxiecode.com/index.php/Tin ... d_elements (unter "Default rule set")

Mit dem hier beschriebenen Tipp:

http://contenido.org/forum/viewtopic.php?t=10308
http://contenido.org/forum/viewtopic.php?t=13840

funktioniert dies dann aber halt nicht mehr. Dann muss man das doch etwas detailierter machen.

Sundriver
Beiträge: 41
Registriert: Mo 21. Nov 2005, 17:06
Wohnort: BB
Kontaktdaten:

Beitrag von Sundriver » Mi 14. Nov 2007, 11:53

@Dodger77,
Dodger77 hat geschrieben:@Sundriver:

Durch die Bestandteile:

Code: Alles auswählen

strong/b
bzw.
für valid-elements/extended-valid-elements wird das beim Speichern wieder zurückgewandelt. Das funktioniert ohne Angabe von valid-elements/extended-valid-elements auch gut, da dies in der Standard-Konfiguration mit drin ist:

http://wiki.moxiecode.com/index.php/Tin ... d_elements (unter "Default rule set")
Soweit Richtig aber wenn ich deren Code

Code: Alles auswählen

Use *[*] to include all elements and all attributes. This can be very useful when used with the invalid_elements option. Example of usage of the valid_elements option:

This example string tells TinyMCE to remove all elements that are not a "a, strong, div or br" element, convert "b" elements to "strong" elements, default "target" to "_blank" and keep the "href", "target" and "align" attributes of the elements.

tinyMCE.init({
	...
	valid_elements : "a[href|target=_blank],strong/b,div[align],br"
});
richtig interpretiere sollte ein <b> wieder zu <strong> und mit em/i [class|style] sollte ein <i> wieder zu einem <em> Tag werden.

Das Problem war ja das weiter unten im Code von tiny_mce.js diese Funktion war, die das für die Gecko Engine wieder zurück geschrieben hat.
Jetzt wo sie aber von mir aus dem Code entfernt wurde bleibt ein <em> Tag wieder ein <em> Tag aber ein <i> Tag zum Beispiel bleibt auch ein <i> Tag was ja laut dem Ruleset beim Cleanup Korrigiert werden müsste, macht es aber nicht. Weder im IE noch im Firefox und auch nicht im Opera.
Die Frage bleibt warum beim Cleanup der <i> Tag nicht Korrigiert wird. Ich hab auch schon versucht die Rule von em/i nach i/em zu ändern, nix passiert...

Es gibt in /contenido/external/wysiwyg/tinymce2 das File editorclass.php, das nach der Beschreibung her ein Wrapper für den tiny ist. In dieser Datei gibt es folgende Funktion:

Code: Alles auswählen

// Valid elements, for compatibility also accepts "tinymce-valid-elements"
		if (!array_key_exists("valid_elements", $this->_aSettings) && 
			 array_key_exists("tinymce-valid-elements", $this->_aSettings))
		{
			$this->setSetting("valid_elements", $this->_aSettings["tinymce-valid-elements"], true);
		}
		$this->setSetting("valid_elements", "+a[name|href|target|title],strong/b[class],em/i[class],strike[class],u[class],p[dir|class|align],ol,ul,li,br, ... 
Wenn ich das jetzt richtig lese werden die Werte für valid-elements nur dann aus dem Array für tinymce-valid-elements gelesen wenn das default Ruleset vom tiny nicht existiert. Ich habe aber in diesem File und auch in der tiny_mce.js das Ruleset gegen das xhtml Ruleset von moxiecode getauscht. Das Ergebnis bleibt aber auch das gleiche, er schreibt das <i> Tag nicht nach <em> um, lässt aber dank der Kastration ein <em> Tag auch stehen.
cu
Sundriver

Sundriver
Beiträge: 41
Registriert: Mo 21. Nov 2005, 17:06
Wohnort: BB
Kontaktdaten:

Problem gelöst ;-)

Beitrag von Sundriver » Mi 14. Nov 2007, 14:20

@ Dodger77,

Das Problem ist gelöst, die Ursache ist eine Variablen Übergabe in der editorclass.php .
Wenn dieser Eintrag in den Mandanteneinstellungen

Code: Alles auswählen

Typ: wysiwyg
Name: tinymce-valid-elements
Wert: *[*]
existiert wird auch genau dieser Wert für valid-elements , *[*][/b] in die tinyMCE.init übernommen und nicht das default Ruleset das ebenfalls in der editorclass.php definiert ist -->
Frame Quelltext vom Editor

Code: Alles auswählen

<!-- Needs to be seperate script tags! -->
<script language="JavaScript" type="text/javascript">
tinyMCE.init({
	'mode': 'exact',
	'theme': 'advanced',
	'theme_advanced_toolbar_location': 'top',
	'theme_advanced_path_location': 'bottom',
	'remove_script_host': false,
	'file_browser_callback': 'myCustomFileBrowser',
	'urlconverter_callback': 'CustomURLConverter',
	'apply_source_formatting': true,
	'remove_linebreaks': false,
	'convert_urls': true,
	'relative_urls': true,
	'elements': 'CMS_HTML',
	'language': 'de',

        ...

        'valid_elements': '*[*]',
	'extended_valid_elements': '*[*]',
	'contenido_background_color': 'white',
	'article_url_suffix': 'front_content.php?idart=137'
});
</script>
<!-- /tinyMCE -->
Mit *[*] kann die cleanup Funktion nix anfangen, daher korrigiert sie auch nix. Wenn man nun die Einträge

Code: Alles auswählen

Typ: wysiwyg
Name: tinymce-valid-elements
Wert: *[*]

und 

Typ: wysiwyg
Name: tinymce-extented-valid-elements
Wert: *[*]
aus den Mandanteneinstellungen entfernt und was den tiny betrifft, nur generator xhtml true drin lässt werden auch die in der editorclass.php definierten Ruleset's
wieder mit an die tinyMCE.init übergeben -->

Code: Alles auswählen

<!-- Needs to be seperate script tags! -->
<script language="JavaScript" type="text/javascript">
tinyMCE.init({
	'mode': 'exact',
	'theme': 'advanced',
	'theme_advanced_toolbar_location': 'top',
	'theme_advanced_path_location': 'bottom',
	'remove_script_host': false,
	'file_browser_callback': 'myCustomFileBrowser',
	'urlconverter_callback': 'CustomURLConverter',
	'apply_source_formatting': true,
	'remove_linebreaks': false,
	'convert_urls': true,
	'relative_urls': true,
	'elements': 'CMS_HTML',
	'language': 'de',
	'document_base_url': 'http://www.****.de/cms/',
	'cleanup_callback': '',
	'content_css': 'http://www.****.de/cms/css/style_tiny.css',
	'width': '100%',
	'height': '480px',
	'directionality': 'ltr',
	'theme_advanced_toolbar_align': 'left',
	'plugin_insertdate_dateFormat': '%Y-%m-%d',
	'plugin_insertdate_timeFormat': '%H:%M:%S',
	'theme_advanced_buttons1':
'cut,copy,paste,pastetext,pasteword,separator,search,replace,separator,undo,redo,separator,bold,italic,underline,strikethrough,sub,sup,separator,insertdate,inserttime,preview,s
eparator,styleselect',
	'theme_advanced_buttons2':
'link,unlink,anchor,image,media,advhr,separator,bullist,numlist,separator,outdent,indent,separator,justifyleft,justifycenter,justifyright,justifyfull,removeformat,separator,for
ecolor,backcolor,separator,ltr,rtl,separator,fullscreen,visualaid,charmap,cleanup,separator,code',
	'theme_advanced_buttons3': 'tablecontrols,separator,formatselect,fontselect,fontsizeselect',
	'plugins': 'table,save,advhr,advimage,advlink,insertdatetime,preview,zoom,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,inlinepopups',
	'valid_elements':
'+a[name|href|target|title],strong/b[class],em/i[class|style],strike[class],u[class],p[dir|class|align],ol,ul,li,br,img[class|src|border=0|alt|title|hspace|vspace|width|height|
align],sub,sup,blockquote[dir|style],table[border=0|cellspacing|cellpadding|width|height|class|align],tr[class|rowspan|width|height|align|valign],td[dir|class|colspan|rowspan|w
idth|height|align|valign],div[dir|class|align],span[class|align],pre[class|align],address[class|align],h1[dir|class|align],h2[dir|class|align],h3[dir|class|align],h4[dir|class|
align],h5[dir|class|align],h6[dir|class|align],hr',
	'extended_valid_elements':
'form[name|action|method],textarea[name|style|cols|rows],input[type|name|value|style|onclick],a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|w
idth|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]',
	'contenido_background_color': 'white',
	'article_url_suffix': 'front_content.php?idart=137'
});
</script>
<!-- /tinyMCE -->
und dann funktioniert das Cleanup auch wieder bestens ;-) und die tiny_mce.js braucht auch nicht editiert werden.

Eventuell sollte man den Beitrag http://contenido.org/forum/viewtopic.php?t=13840 dahingehend überprüfen oder die Variablenübergabe in der editorclass.php ändern.

Gestet mit der aktuellen 4.6.23
cu
Sundriver

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 15. Nov 2007, 00:44

Ich habe es noch nicht ganz verstanden.
Wenn ich das jetzt richtig lese werden die Werte für valid-elements nur dann aus dem Array für tinymce-valid-elements gelesen wenn das default Ruleset vom tiny nicht existiert.
Zum Zeitpunkt der editorclass.php gibt es nie ein default Ruleset.

Ist valid_elements als Einstellung angegeben, wird tinymce-valid-elements (als veralteter Eintrag) ignoriert.

Ist valid_elements nicht angegeben, aber dafür tinymce-valid-elements, werden die Einträge aus tinymce-valid-elements verwendet.

Ist valid_elements angegeben, wird der Inhalt verwendet.

Ist weder valid_elements noch tinymce-valid-elements angegeben, wird der Standard aus der editorclass.php verwendet.

D.h. es sollte keinen Unterschied machen, ob Du valid_elements oder tinymce-valid-elements definierst.

*[*] sollte alles erlauben, wenn - sofern es für den Administrator akzeptabel ist - alles HTML zugelassen werden soll.

Wenn dann aber intern Dinge hin- aber nicht zurückgetauscht werden, halte ich das für einen tinyMCE-Bug.

Vielleicht liege ich auch gänzlich falsch - dann freue ich mich über weitere Erläuterungen, Du bist ja anscheinend gerade gut im Code drin ... :wink:

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 » Do 15. Nov 2007, 08:52

HerrB hat geschrieben:D.h. es sollte keinen Unterschied machen, ob Du valid_elements oder tinymce-valid-elements definierst.

*[*] sollte alles erlauben, wenn - sofern es für den Administrator akzeptabel ist - alles HTML zugelassen werden soll.

Wenn dann aber intern Dinge hin- aber nicht zurückgetauscht werden, halte ich das für einen tinyMCE-Bug.
Was man verwendet (alte oder neue Angabe), ist in der Tat unerheblich. Es ist aber halt so, dass die vorgeschlagene Angabe von *[*] den in der "editorclass.php" angegebenen Standard für (tinymce-)valid-elements überschreibt und so der Rücktausch (z.B. über "strong/b") nicht mehr funktioniert. Ob das bei Moxiecode als Bug gesehen wird, wird sich zeigen müssen.
Für mich ist es allerdings nicht so wild, da ich eh nie ein Fan von *[*] war und den Redakteuren da lieber weniger erlaube.

Gesperrt