2013-08-15 9 views
36

Ich versuche eine Lösung zu finden, um CKEditor zu vermeiden, aber auch der ältere FCKeditor löscht alle <i> Tags von zuvor eingefügtem Inhalt in die db.CKEditor Strips <i> Tag

Fall:

ich HTML-Inhalt an die DB einfügen, enthalten einige Inhalte, die <i> Elemente. Ich mache das mit dem CKEditor. Alles funktioniert perfekt und der Inhalt erscheint auf der Webseite. Wenn ich jedoch den zuvor eingefügten Inhalt bearbeiten möchte, fehlen die Elemente <i>.

In meinem speziellen Fall verwende ich:

<i class="fa-icon-fullscreen fa-icon-xxlarge main-color"></i> 

Natürlich, wenn ich den Editor zu deaktivieren, zeigt der Inhalt ganz gut in dem Textfeld auf.

+1

Es gibt eine andere SO Frage zu diesem, wo ein Typ eine breite Methode zeigt, um leere Tags zu erlauben: http://StackOverflow.com/a/25016231/2418655 – dhaupin

+0

Ich beseitigte das Problem durch Entfernen von CKEditor (was ich sehr mag) aus dem Projekt und mit Codemirror/Jsbeautify ohne WYSIWYG. Vielleicht keine Option für die meisten. – MrBoJangles

Antwort

45

fand ich die Lösung für dieses spezifische Problem, das ich mit dem <i> Tag lief in

Die ursprüngliche Antwort, die ich von drupal forum bekam

Das Update oder zwicken (Sie nennen es) denn es ist zu stellen Sie die folgenden in die ckeditors config.js:

// ALLOW <i></i> 
config.protectedSource.push(/<i[^>]*><\/i>/g); 

Dank Spasticd onkey für den Verweis auf den Link.

+0

Ich sehe keine Symbole beim Bearbeiten ... – Danil

+0

Nein, Sie können die Symbole in der Wysiwyg-Bereich nicht sehen.Aber wenn Sie in der Quelle des WYSIWYG-Editor suchen, werden Sie die sehen. – HenryW

+0

Sie sollten dies als Ihre akzeptierte Antwort markieren. –

2

Es gibt zwei mögliche Probleme:

  • Lesen Sie mehr über Advanced Content Filter. CKEditor entfernt Elemente, die nicht erlaubt sind, aber Sie können die Filterregeln erweitern.

  • Wenn jedoch das Problem ist, dass CKEditor leere <i> Elemente entfernt, dann müssen Sie eine andere Art der Verwendung finden. CKEditor ist kein WYSIWYG-Website-Generator. Es ist ein Dokumenteneditor, daher muss der geladene Inhalt eine Bedeutung haben. Ein leeres Inline-Element hat keine Bedeutung, daher wird es entfernt, weil sonst der Editor nicht wüsste, was damit zu tun ist.

    Eine der möglichen Lösungen in der (nahen) Zukunft wird sein, diese leeren Elemente mit Widgets system zu behandeln. Aber jetzt rate ich Ihnen, die CKEDITOR.htmlDataProcessor und short guide zu überprüfen, wie man es benutzt.

3

für Version 4.3 ckeditor

in Konfig.js (nach Config Abschnitt) paste

CKEDITOR.dtd.$removeEmpty['b'] = false; 

und schreiben Widget mit Code

CKEDITOR.plugins.add('bwcaret', { 
requires: ['widget'/*, 'richcombo'*/], 

icons: 'bwcaret', 

init: function(editor) { 

    editor.widgets.add('bwcaret', { 

     button: 'Create a caret', 

     template: '<b class="caret"></b>', 


     allowedContent: 'b(!caret)', 

     requiredContent: 'b(!caret)', 

     upcast: function(element) { 
      return element.name == 'b' && element.hasClass('caret'); 
     }, 

    }); 
} 

});

+0

funktioniert auch für Version 4.2. –

+1

unmöglich, Widgets wurden in 4.3 –

53

Wenn die protectedSource-Lösung verwendet wird, werden i Tags nicht mehr entfernt, aber img Tags werden nicht mehr im WYSIWIG-Modus von CKEditor angezeigt (ich verwende 4.3.1). Die Lösung, die besser für mich gearbeitet ist CKEDITOR.dtd.$removeEmpty

Zum Beispiel mit leeren i Umbauten zu entfernen, um zu deaktivieren, habe ich folgendes zu dem config.js

// allow i tags to be empty (for font awesome) 
CKEDITOR.dtd.$removeEmpty['i'] = false; 

Hinweis: Dies sollte außerhalb der CKEDITOR.editorConfig = function(config) Funktion gesetzt werden .

+2

eingeführt Dies scheint der sinnvollste Weg zu mir. Schamantworten, die nach der Tat hinzugefügt werden, erhalten nicht viel Anerkennung. – alexrussell

+0

Das hat auch für mich funktioniert. Vielen Dank. – Rahatur

15

Hier ist, was für mich

fügen Sie die drei folgenden Codezeilen in der gleichen Reihenfolge, in der Drupal ckeditor Profileinstellung admin/config/content/ckeditor/edit/Full

ADVANCED OPTIONS Arbeiten> > Benutzerdefinierte JavaScript-Konfiguration

config.allowedContent = true; 
 
    config.extraAllowedContent = 'p(*)[*]{*};div(*)[*]{*};li(*)[*]{*};ul(*)[*]{*}'; 
 
    CKEDITOR.dtd.$removeEmpty.i = 0;

Die erste Zeile schaltet die erweiterte Filterung ziemlich aus

Die zweite Zeile erlaubt die ALL-Klasse (), einen beliebigen Stil {} und jedes Attribut [*] für p, div, li und ul.

Die letzte Zeile ist für das leere Tag ... diese Zeile arbeitet mit Bildern ... Ich habe festgestellt, dass wenn Sie config.protectedSource.push verwenden (/] *> </i>/g); Es löscht das Tag während der Bearbeitung.

+0

Sehr schön @Alauddin. Ich habe alles auf dieser und anderen Seiten versucht. Deine Lösung funktioniert für mich. Sehr geschätzt! Frage (geringfügiges Detail): Gibt es eine Möglichkeit, den Einzug der HTML-Quelle beizubehalten? – Bisonbleu

+0

Vielen Dank. Dies ist die einzige funktionierende Lösung auf Drupal! –

Verwandte Themen