Я использовал CKEditor в течение некоторого времени, и он отлично поработал. Я в значительной степени избавился от любых проблем, которые у меня были, но этот, по-моему, не понял. Когда я добавляю встроенные атрибуты к элементам, например style = "color: #ff0;"
в теге <p></p>
, они удаляются, когда я переключаюсь с wysiwyg на исходный вид. Никакой сохранения или подачи не сделано, и ckeditor добавлен на мой сайт, который является моим собственным script. Любые идеи относительно того, что вызовет это. Все результаты поиска, которые я могу найти, соответствуют тому, что происходит в Drupal, но Drupal кажется проблемой не редактором во всех случаях. Еще раз спасибо!
CKEditor разбивает встроенные атрибуты
Ответ 1
Похоже, вы используете CKEditor 4.1+, который поставляется с Advanced Content Filter (ACF). Если это так, вам нужно указать config.allowedContent
и настроить его, чтобы заставить ваши вещи работать. Вы также можете быть заинтересованы в config.extraAllowedContent
.
Подробнее см. этот ответ.
Ответ 2
Для всех, кто ищет простой пример того, как включить дополнительную разметку в CKEditor без полного отключения ACF, вот краткий фрагмент:
CKEDITOR.replace( 'editor1', {
extraAllowedContent: 'style;*[id,rel](*){*}'
} );
extraAllowedContent здесь включает элемент <style>
, допускает наличие двух дополнительных атрибутов (в квадратных скобках) для всех (*
является подстановочным знаком) уже допустимые элементы, позволяет использовать для них любые имена классов (*)
и позволяет использовать любые встроенные стили {*}
Ответ 3
Привет, вы можете легко остановить ACF. по умолчанию ваша конфигурация ---
function ckeditor($name,$value='',$height=300){
return '<textarea name="'.addslashes($name).'">'.htmlspecialchars($value).'</textarea>
<script>$(function(){CKEDITOR.replace("'.addslashes($name).'",{});});</script>';
}
просто добавьте это в фигурные скобки:
allowedContent: true
теперь ваша конфигурация будет:
function ckeditor($name,$value='',$height=300){
return '<textarea name="'.addslashes($name).'">'.htmlspecialchars($value).'</textarea>
<script>$(function(){CKEDITOR.replace("'.addslashes($name).'",{allowedContent: true});});</script>';
}
Ответ 4
Я столкнулся с той же проблемой, и ниже ответ решил мою проблему:
config.allowedContent = true;
config.extraAllowedContent = '*(*);*{*}';
config.extraAllowedContent = 'span;ul;li;table;td;style;*[id];*(*);*{*}';
Ответ 5
У меня была та же проблема, что ck удалял не только некоторые атрибуты, но и целые элементы при вставке элемента блока внутри элемента блока (div с некоторыми атрибутами, вставленными внутри p) при использовании этого метода:
editor.insertHtml(html);
в чем проблема: вместо этого использовалось это обходное решение:
editor.insertElement(CKEDITOR.dom.element.createFromHtml(html));