CKEditor - обрезка аттрибутов style

Главные вкладки

Аватар пользователя Movement Movement 3 июля 2012 в 11:48

Приветствую участников сообщества!

Возникла следующая проблема с CKEditor на Drupal 7.
При добавлении например цвета шрифта, редактор добавляет тэг span с аттирибутом style, например так:
текст <span style="color:#ff0000;">красный текст</span> ещё текст

Далее всё это хозяйстсво нормально сохраняется в базу и нормально отображается. Однако при попытке нового редактирования, аттрибуты style безжалостно обрезаются, т.е. получается так:
текст <span>красный текст</span> ещё текст

Т.е. выделение цветом и прочие вещи, задаваемые через тег style у тега span при новом сохранении будут потеряны, что чертовски неудобно.

Если в браузере при редактировании отключить JavaScript (т.е. не дать загрузиться CKEditor-у), аттрибуты style остаются на месте. Т.е. фильтр при сохранении срабатывает правильно, отображается всё тоже верно, обрезка аттрибутов происходит именно при загрузке текста обратно в CKEditor. Сам редактор версии 3.6.3 (3.6.2 - аналогично, более ранних не сохранил), модуль последней версии (7.x-1.9). Посмотрел на 6-м Drupal-е - там такой проблемы нет.

Буду очень благодарен за любую помощь в решении проблемы.

Комментарии

Аватар пользователя alex_shut alex_shut 3 июля 2012 в 13:12

"Movement" wrote:
Однако при попытке нового редактирования, аттрибуты style безжалостно обрезаются,

странно. Не замечал таких проблем. заказчик на сайте перекрашивает текст то вдоь то впоперек - все адекватно работает

Аватар пользователя zil.arman zil.arman 3 июля 2012 в 13:28

у себя на 7рке тоже таких проблем не встречал...

возможно, создан материал в формате 'Full HTML', а редактируется под 'Filtered HTML'?(Фильтрованный срезает много тэгов и все стили)

На всякий случай, можете попробовать этот модуль - WYSIWYG Filter.

Аватар пользователя alex_shut alex_shut 3 июля 2012 в 13:35

"zil.arman" wrote:
возможно, создан материал в формате 'Full HTML', а редактируется под 'Filtered HTML'?(Фильтрованный срезает много тэгов и все стили

вот такое очень может быть)

Аватар пользователя Movement Movement 3 июля 2012 в 15:26

Я мыслю так: если бы что-то срезалось фильтром, то в базу сохранялось бы именно так (в срезанном виде), но в базе-то всё ок, срезается именно при загрузке на редактирование в CKE.
Разве я не прав?

Уточняю ещё раз: в базе всё ок, в окне редактирования текст уже обычный (без цвета), в исходном коде - голый span (без аттрибутов). Если в браузере отключить JavaScript, CKE не грузится и в окне редактирования полная версия (span со всеми аттрибутами). Т.е. видимо сам CKE почему-то не распознаёт своё же форматирование. При этом аттрибуты у тэга div распознаются совершенно нормально, заметил такое поведение только для span.

Аватар пользователя Movement Movement 3 июля 2012 в 16:29

Спасибо всем за советы. Удалось решить проблему эмпирически, выставив форматом по умолчанию Full HTML (стояло по умолчанию Filtered HTML). Всё заработало даже у тех пользователей, которым этот формат вовсе недоступен.

Технические детали:
Речь шла об использовании редактора CKE в своём модуле (не в штатных формах Drupal).

Исходя из официальной документации:
#format: the format to apply. If you want to use the default format, set this property to NULL in your form constructor function, and the filter system will handle the rest.

Т.е. если выставить свойство #format поля в NULL, должен быть подставлен формат по умолчанию (в моём случае Filtered HTML). Однако видимо есть ошибка в модуле CKEditor (не в самом редакторе), и формат по умолчанию не подставляется, что приводит к срабатыванию фильтра со странными настройками (не соответствующими ни Full HTML, ни Filtered HTML) именно при загрузке текста в CKEditor. Если подставить в #format значения Full HTML или Filtered HTML (не важно), всё работает.

Таким образом способа решения 2:
1. Выставить по умолчанию формат Full HTML;
2. Явно указывать нужный формат по умолчанию в свойстве #format.