web-dev-qa-db-fra.com

CKEditor supprime les attributs en ligne

J'utilise CKEditor depuis un certain temps et cela a très bien fonctionné. Je me suis à peu près débarrassé de tous les problèmes que je rencontrais, mais celui-ci ne semble pas comprendre. Lorsque j'ajoute des attributs intégrés à des éléments, par exemple style = "color: #ff0;" sur une balise <p></p>, ils sont supprimés lorsque je passe de wysiwyg à la vue source. Aucune sauvegarde ou soumission n'est faite et ckeditor est ajouté à mon site, qui est mon propre script. Toute idée quant à ce qui causerait ceci. Tous les résultats de recherche que je peux trouver correspondent à ce qui se passe dans Drupal, mais Drupal semble être le problème, et non l'éditeur dans tous les cas. Merci encore!

23
tiantang

C'est comme si vous utilisiez CKEditor 4.1+ fourni avec Filtre de contenu avancé (ACF) . Si tel est le cas, vous devez spécifier config.allowedContent et le configurer pour que vos éléments fonctionnent. Vous pouvez également être intéressé par config.extraAllowedContent .

Voir cette réponse pour plus de détails.

33
oleq

Pour ceux qui recherchent un exemple simple sur la façon d'activer le balisage supplémentaire dans CKEditor sans désactiver complètement l'ACF, voici un court extrait:

CKEDITOR.replace( 'editor1', {
    extraAllowedContent: 'style;*[id,rel](*){*}'
} );

extraAllowedContent here active l'élément <style>, autorise deux attributs supplémentaires (entre crochets) pour tous (* est un caractère générique) des éléments déjà autorisés, autorise l'utilisation de tout nom de classe (*) et autorise l'utilisation de tout style en ligne {*}

9
Wiktor Walc

salut vous pouvez arrêter ACF facilement. par défaut votre configaration est ---

function ckeditor($name,$value='',$height=300){
    return '<textarea name="'.addslashes($name).'">'.htmlspecialchars($value).'</textarea>
<script>$(function(){CKEDITOR.replace("'.addslashes($name).'",{});});</script>';
} 

ajoutez simplement ceci dans les accolades:

allowedContent: true

maintenant votre configuration sera:

function ckeditor($name,$value='',$height=300){
    return '<textarea name="'.addslashes($name).'">'.htmlspecialchars($value).'</textarea>
<script>$(function(){CKEDITOR.replace("'.addslashes($name).'",{allowedContent: true});});</script>';
}
5
Chayon Shaah

J'ai fait face au même problème et la réponse ci-dessous a résolu mon problème:

config.allowedContent = true;
config.extraAllowedContent = '*(*);*{*}';
config.extraAllowedContent = 'span;ul;li;table;td;style;*[id];*(*);*{*}';
3
Rakhi Prajapati

J'ai eu le même problème, ck ne supprimant pas seulement certains attributs, mais des éléments entiers lors du collage d'un élément de bloc, à l'intérieur d'un élément de bloc (div avec certains attributs collés dans un p) en utilisant cette méthode:

editor.insertHtml(html);

ce qui a résolu le problème, c’était d’utiliser cette solution de contournement:

editor.insertElement(CKEDITOR.dom.element.createFromHtml(html));
1
st'sahib