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.
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 )
.
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.
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.
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' );
},
});
}
});
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.
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