tinymce <-> inside editing problem ? (splitof)

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

tinymce <-> inside editing problem ? (splitof)

Beitrag von HerrB » Do 21. Jul 2005, 21:52

Darth-Vader:

So nachdem ich den tinyMCE ca. 1 Monat getestet habe sind mir dann noch 2 Dinge aufgefallen, die mir so nicht gefallen:


1.) Bei Bildern werden Attribute wie "border", "align", "height", "width", etc und bei Links das Attribut "target" eingefügt, welche aber laut XHTML 1.0 invalid sind.

Deswegen habe ich in der Datei ../contenido/external/wysiwyg/tinymce/editor.php (Pfad kann abweichen!) die folgenden Zeilen

Code: Alles auswählen

+ "a[name|href|target|title|onclick],"
+ "img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],"
+ "hr[class|width|size|noshade],"
+ "font[face|size|color|style],"
+ "span[class|align|style],"

durch die folgenden ersetzt

Code: Alles auswählen

+ "a[name|href|title|onclick],"
+ "img[class|src|alt|title|onmouseover|onmouseout|name],"
+ "hr[class|width|size|noshade],"
+ "span[class|align|style],"

( Tip: Um die passende Stelle zu finden einfach mal nach "img" suchen, da dies nur einmal in der ganzen Datei vorkommt ;) )

Man sieht denk ich auch direkt, dass ich den font-Tag rausgenommen habe, weil der auch obsolete ist und man Schrift über CSS steuert (wie eigentlich alles, was Design angeht). ;)



2.) Ich habe etwas seltsames festgestellt, folgende Situation: Wenn ich in meinem CMS_HEAD ein Bild einfüge wird das schön da reingesetzt und ist valid, also kein border und auch ein "/>" statt einem einfachen ">". Bearbeite ich nun mein CMS_HTML des gleichen Artikels und speicher ab, wird dort auch valider Code erzeugt (z.B.: "<br/>" statt einfach "<br>", bilder haben keinen border und deren Tags werden auch brav geschlossen, etc). Rufe ich nun aber den Artikel ganz normal im Frontend auf, ist zwar der zuletzt bearbeitete Teil CMS_HTML valid, aber im CMS_HEAD wurde das "/>" vom "<img>" gegen ein einfaches ">" getauscht und somit ist meine Seite wieder nicht valid. Wenn ich zuerst CMS_HTML bearbeite und dann CMS_HEAD ist es genau anders herum! :roll:


3.) Das Gleiche passiert übrigens auch wenn man nur auf "Speichern" drückt und den Editor garnicht erst aufruft! *grml* :evil: Man könnte daraus glaub schließen, dass es an Contenido selbst... oder?

Kann jemand diesen "Bug" (:?:) :roll: reproduzieren bzw. bestätigen?
Hat vllt jemand schon eine Lösung parat oder kann mir jmd sagen ob das nun Contenido umschriebt oder tinyMCE und in welcher Datei das zu finden ist?

Wäre echt nett,

greets Lars.

*********** (da ist bei split was daneben gegangen, deshalb findet sich dieses posting nun hier ergänzt)


Meine Meinung:
Mindestens bei a sollte target nicht entfallen. Es ist zwar in Strict-XHTML 1.0 ungültig (wer auch immer sich das ausgedacht hat), aber in Transitional und über XHTML 1.1 möglich.

Eine interessante Webseite zu dem Thema: http://www.texastar.com/tips/2004/target_blank.shtml

Noch eine größere Kanone auf den Spatz: http://www.xoops.org/modules/smartfaq/faq.php?faqid=486

Ich weiß ehrlich nicht, was das target-Attribut bei XHTML schadet - die ggf. notwendige Ergänzung von JS oder eines speziellen Modul-DTDs kann doch wohl nicht besser sein... :shock:

Naja, meine Meinung.

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

Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader » Do 21. Jul 2005, 21:56

Da kann man jetzt köstlich drüber streiten *fg*

Aber das ändert nichts daran, dass <br> und <img> nicht geschlossen bzw "wieder geöffnet" werden! :evil: Und das is das Hauptproblem hier, denn das mit dem target hab ich ja selbst gelöst... ;)

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

Beitrag von Dodger77 » Do 21. Jul 2005, 23:29

Darth-Vader hat geschrieben:2.) Ich habe etwas seltsames festgestellt, folgende Situation: Wenn ich in meinem CMS_HEAD ein Bild einfüge wird das schön da reingesetzt und ist valid, also kein border und auch ein "/>" statt einem einfachen ">". Bearbeite ich nun mein CMS_HTML des gleichen Artikels und speicher ab, wird dort auch valider Code erzeugt (z.B.: "<br/>" statt einfach "<br>", bilder haben keinen border und deren Tags werden auch brav geschlossen, etc). Rufe ich nun aber den Artikel ganz normal im Frontend auf, ist zwar der zuletzt bearbeitete Teil CMS_HTML valid, aber im CMS_HEAD wurde das "/>" vom "<img>" gegen ein einfaches ">" getauscht und somit ist meine Seite wieder nicht valid. Wenn ich zuerst CMS_HTML bearbeite und dann CMS_HEAD ist es genau anders herum! :roll:


3.) Das Gleiche passiert übrigens auch wenn man auf "Speichern" drückt! *grml* :evil:

Kann jemand diesen "Bug" (:?:) :roll: reproduzieren bzw. bestätigen?
Hat vllt jemand schon eine Lösung parat oder kann mir jmd sagen ob das nun Contenido umschriebt oder tinyMCE und in welcher Datei das zu finden ist?
Ja, den kann ich bestätigen. Der tritt auch z.B. mit HTMLarea auf, siehe:

http://www.contenido.org/forum/viewtopi ... highlight=

Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader » Fr 22. Jul 2005, 21:12

So nach einigen Stunden suchen und rumprobieren hab ich einen dirrty workaround für Problem 2 und/bzw. Problem 3 gefunden ( Problem 1 hatte ich ja schon gelöst gehabt, siehe mein post auf der vorherigen Seite!) :


In der Datei "../contenido/includes/functions.con.php" (Pfad kann abweichen!) in der Funktion "conSaveContentEntry" (also einfach mal im Editor eures Vertrauens nach "conSave" suchen! ;)) folgende Zeilen

Code: Alles auswählen


$cut_path  = $cfgClient[$client]["path"]["htmlpath"];
$value = str_replace($cut_path, "", $value);
$value = stripslashes($value);
$value = urlencode($value);



durch diese ersetzen:

Code: Alles auswählen


$cut_path  = $cfgClient[$client]["path"]["htmlpath"];


/* changes by Lars D. Forseth <lars@forseth.de> on 22nd July 2005 */
// close line break tags -- "<br>" --> "<br />"
$value = str_replace("<br>", "<br />", $value);
// close image tags -- "<img>" --> "<img />"
$value = preg_replace("(<img([^\>]*[^/])>)", "<img$1 />", $value);
// Thanks to: http://www.regexlib.com/REDetails.aspx?regexp_id=208 
/* end changes by Lars D. Forseth */


$value = str_replace($cut_path, "", $value);
$value = stripslashes($value);
$value = urlencode($value);


Von da ab werden die img-tags und die br-tags mit einem "/>" geschlossen, statt einem schlichten ">".



HINWEIS:

Ich weiss, dass das ein absolut dreckiger workaround ist, aber bei meiner Suche nach der wirklichen Ursache bin ich bei dem Punkt stehengeblieben, dass ich vermute dass das JavaScript im Backend aus irgendeinem Grund den "/" vor einem ">" löscht (???) :roll:
Ich habe dann auch Artikel gefunden (über Google), die besagen, dass der "/" in JavaScript das Zeichen für die Division ist... andererseits handelt es sich hier um Strings also sollte es egal sein, aber wer weiss, vllt ist ja die Kombination "/>" ein besondres Easteregg, dass das böse XHTML nicht zu würdigen weiss? ;) :lol:

Ich bin dann nach langem hin und her zu dem Entschluss gekommen, dass ich schneller zum Ziel komme, wenn ich das einfach via regexp abfange kurz bevor der Code in die Datenbank geschrieben wird.

Zu beachten ist bei dieser Lösung noch, dass keine ">" im img-tag selbst vorkommen dürfen (also nur am Ende des img-tag!), also z.b. _nicht_ im alt-Attribut, etc.

Ich denke aber mit dieser Einschränkung kann man leben...! ;) :lol:



so long,

Darth. :twisted:

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 22. Jul 2005, 22:44

ähm
ad. bug
sollte man das thema nicht splitten ?
das hat an sich nichts mehr mit dem tinymce zu tun...
*** make your own tools (wishlist :: thx)

Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader » Sa 23. Jul 2005, 00:00

ich bin kein moderator, also tut euch keinen zwang an... ;)

Snoopy
Beiträge: 239
Registriert: Mo 15. Sep 2003, 18:45
Kontaktdaten:

Beitrag von Snoopy » So 14. Aug 2005, 13:34

@darth-vader

denk dran, es gibt auch noch den TAG <hr /> :wink:
Gruß aus Hamburg :wink:

apicalart
Beiträge: 161
Registriert: Fr 18. Mär 2005, 13:09
Wohnort: Linnich ( NRW )
Kontaktdaten:

Die Lösung ist nicht nur dirty, Sie beisst sich ...

Beitrag von apicalart » Do 8. Sep 2005, 01:44

und zwar mit der Lösung tagstolower von emergence:


Siehe hier aus dem Thread Contenido und XHTML.


hmm ich hab da was nettes das die ganze funktion die du geschrieben hast vermutlich komplett auseinander nimmt... (hab mich gerade mit regulären ausdrücken etwas herumgespielt... und das ganze in einer zeile erledigt)

also vor dem urlencode (zeile 508)
Code:
$value = TagsToLower($value); // convert all html tags to lower case

einfügen und am ende der datei oder in deiner externen datei folgendes einbauen...
weiteres wie alle attribute mit quotes zu versehen könnte man dann dazu einbauen...

Code:
/**
* Convert all tags To lowercase (xhtml - conform)
*
* @param string $value Content
*
* @return $value
*
* @author Martin Horwath <horwath@dayside.net>
* @copyright DAYSIDE.net <www.dayside.net>
*/
function TagsToLower($value){
$value = preg_replace(',<(/?)([a-zA-Z]+)([^>]+)?(/?)>,ie', '"<\1".strtolower("\2")."\3\4>"', $value);
return $value;
}



Aber auch ich habe dasselbe Problem und kann es reproduzieren und dachte eigentlich, das wäre jetzt mit dem Wechsel von htmlarea3 zu tiny erledigt. Also muss es an Contenido liegen !!! Ich nutze 4.4.5 mit tinymce 0.0.5
Dat gijjt et doch nit wirklich, odder !

Grüsse aus dem Rheinland
http://www.eukoba.de

apicalart
Beiträge: 161
Registriert: Fr 18. Mär 2005, 13:09
Wohnort: Linnich ( NRW )
Kontaktdaten:

Also ich habe jetzt beide gekoppelt !!!

Beitrag von apicalart » Fr 9. Sep 2005, 17:47

Ich habe die Lösungen von Darth-Vader und Emergence gekoppelt.


D.h. in der Datei function.con.php die function conSaveContentEntry suchen und statt

Code: Alles auswählen

    $cut_path  = $cfgClient[$client]["path"]["htmlpath"];

    $value = str_replace($cut_path, "", $value); 
    $value = stripslashes($value);
    $value = urlencode($value); 

das einsetzen

Code: Alles auswählen

$cut_path  = $cfgClient[$client]["path"]["htmlpath"];

    
    /* changes by Lars D. Forseth <lars@forseth.de> on 22nd July 2005 */ 
    // close line break tags -- "<br>" --> "<br />" 
    $value = str_replace("<br>", "<br />", $value); 
    // close image tags -- "<img>" --> "<img />" 
    $value = preg_replace("(<img([^\>]*[^/])>)", "<img$1 />", $value); 
    // Thanks to: http://www.regexlib.com/REDetails.aspx?regexp_id=208 
    /* end changes by Lars D. Forseth */ 


    $value = str_replace($cut_path, "", $value); 
    $value = stripslashes($value);
    $value = TagsToLower($value); // convert all html tags to lower case 
    $value = urlencode($value);


und am Ende vor dem ?> folgendes einsetzen:

Code: Alles auswählen

/** 
 * Convert all tags To lowercase (xhtml - conform) 
 * 
 * @param string $value Content 
 * 
 * @return $value 
 * 
 * @author Martin Horwath <horwath@dayside.net> 
 * @copyright DAYSIDE.net <www.dayside.net> 
 */ 
function TagsToLower($value){ 
   $value = preg_replace(',<(/?)([a-zA-Z]+)([^>]+)?(/?)>,ie', '"<\1".strtolower("\2")."\3\4>"', $value); 
   return $value; 
} 



Ergebnis : Bearbeite ich jetzt ein Text/html Feld stimmt nach dem Speichern dort alles. In dem nicht bearbeiteten Feld macht er dann aus <br /> wieder <br> und setzt das / nicht mehr bei img, also <img=... />
Es werden die Umlaute nicht umgewandelt und bei height und width fehlen die "". Bei alt und title fehlen die "" übrigens nicht.

Axo @ darth : height und width sind nur in tables nicht erlaubt bei xhtml, bei Bildern schon.

Was kann man tun
Dat gijjt et doch nit wirklich, odder !

Grüsse aus dem Rheinland
http://www.eukoba.de

ramon
Beiträge: 6
Registriert: Mo 9. Feb 2004, 12:56
Kontaktdaten:

Gleiche Problem mit tinymce2

Beitrag von ramon » Mo 19. Sep 2005, 21:28

Habe auch das Problem das im Editor br /> und img /> in der HTML Ansicht richtig angezeigt werden und nach dem speichern verändert sich der Code in br> oder img>. (Aber auch nicht immer!!!!) Manchmal reicht es aus den Editor noch mal zu öffnen und neu zu speichern und es geht. (Beim nächsten am ist es meist aber wieder falsch) Gibt es da schon eine Lösung?

Antworten