CKEditor bandes Tag

J'essaie de trouver une solution pour éviter CKEditor, mais aussi l'ancien FCKeditor supprime tout <i> balise du contenu précédemment inséré dans la base de données.

Cas:

J'insère du contenu html dans la base de données, certains contenus contiennent les éléments <i>. Je le fais avec le CKEditor. Tout fonctionne parfaitement et le contenu apparaît sur la page Web. Mais quand je veux éditer le contenu précédemment inséré, les éléments <i> sont manquants.

dans mon cas spécifique je utilisation:

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

Bien sûr, si je désactive l'éditeur, le contenu apparaît très bien dans la zone de texte.

39
demandé sur Reinmar 2013-08-15 14:02:17

6 réponses

Lorsque la solution protectedSource est utilisée, les balises i ne sont plus supprimées, mais les balises img cessent d'apparaître en mode WYSIWIG de CKEditor (j'utilise 4.3.1). La solution qui a mieux fonctionné pour moi est de désactiver la suppression des balises i vides en utilisant CKEDITOR.dtd.$removeEmpty

Par exemple, j'ai ajouté ce qui suit à la configuration.js

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

Note: Ceci devrait être placé en dehors de la fonction CKEDITOR.editorConfig = function( config ).

58
répondu Mike Peterson 2017-07-10 06:37:04

J'ai trouvé la solution à ce problème spécifique que j'ai rencontré avec la balise <i>

La réponse originale que j'ai reçue de forum drupal

Le correctif ou le tweak (vous le nommez) est de définir ce qui suit dans la configuration de ckeditors.js:

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

Merci à Spasticdonkey pour m'avoir pointé vers le lien.

49
répondu HenryW 2014-01-31 09:05:57

Voici ce qui fonctionne pour moi

Ajoutez les 3 lignes de code ci-dessous dans le même ordre dans le paramètre de profil Drupal ckeditor admin/config/content/ckeditor/modifier/Plein -

Options avancées > > configuration JavaScript personnalisée

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

La première ligne désactive à peu près le filtrage avancé

La deuxième ligne autorise toutes les classes (), tout style {} et tout attribut [ * ] pour p,div, li et ul.

La dernière ligne est pour le vide balise...cette ligne fonctionne avec des images...J'ai trouvé que si vous utilisez config.protectedSource.appuyez sur ( / ]* > / g); il supprime la balise lors de l'édition.

18
répondu Alauddin 2015-01-05 21:01:04

Pour 4.3 version ckeditor

Dans config.js (après la section config) coller

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

Et écrire un widget avec le 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' );
        },

    });
}

});

4
répondu Andrey 2013-12-30 13:33:39

Il y a deux problèmes possibles:

  • Lisez à propos de Avancées de filtrage de Contenu. CKEditor supprime des éléments qui ne sont pas autorisés, mais vous pouvez étendre les règles du filtre.

  • Cependant, si le problème est que CKEditor supprime les éléments <i> vides, vous devez trouver un autre moyen de l'utiliser. CKEditor n'est pas un créateur de site web WYSIWYG. C'est un éditeur de document, donc le contenu chargé doit avoir une signification. L'élément inline vide n'a aucune signification, par conséquent, il est supprimé, car sinon éditeur ne saurait pas quoi faire avec elle.

    L'Une des solutions possibles dans le futur (proche), sera d'utiliser Widgets système, pour gérer ces éléments vides. Mais pour l'instant, je vous conseille de vérifier le CKEDITOR.htmlDataProcessor et Guide Court Comment l'utiliser.

3
répondu Reinmar 2013-08-15 11:28:57

J'ai trouvé une solution permanente pour cela.en fait, ce qui est arrivé ckeditor enlever seulement balise vide.quelle que soit la balise, peut b <i> tag ou <span> tag

Si vous utilisez une icône, comme font-awesome,maeterlize icône etc ... vous pouvez l'arrêter en utilisant le code ci-dessous dans votre fichier config.js

CKEDITOR.dtd.$removeEmpty.span = false; 
CKEDITOR.dtd.$removeEmpty.i = false;

Si vous utilisez plus d'étiquette vierge ensuite, vous devez ajouter le nom de la balise après $removeEmpty

0
répondu Soubhagya Kumar 2018-05-28 05:21:44