Я использую плагин media embed для ckeditor. Он отлично работает, код корректно сохраняется в базе данных и youtube, soundcloud etd. игроки отображают ok на странице. Но когда пользователь переходит к своей администрации, где он может редактировать информацию, текст внутри и с тегами не отображается, поэтому, когда пользователь нажимает кнопку сохранения, все ранее сохраненные iframe будут "стерты", а остальные отформатированного текста будут сохранены. Есть ли способ отобразить код iframe в ckeditor?
Ckeditor не читает код вставки мультимедиа
Ответ 1
Я предполагаю, что вы используете CKEditor 4.1.x, который поставляется с Advanced Content Filter (ACF). Скорее всего, дело в том, что вы используете разные редакторы для редактирования интерфейса/бэкэнд.
Каждый плагин расширяет свойство allowedContent с собственными правилами для тегов, атрибутов и классов. Используя эти правила, редактор автоматически вытесняет нежелательное содержимое, например, если ваш выложенный редактор разрешает <iframe>
, потому что он загружен плагином mediaembed, тогда ваш внутренний редактор без этого плагина удалит ваш <iframe>
из содержимого.
Кроме того, ACF также отслеживает вашу конфигурацию панели инструментов, поэтому, даже если вы включите плагин, но вы не хотите, чтобы кнопка на панели инструментов, любой контент, который предоставляет кнопка (т.е. <iframe>
), также будет запрещен в выходе редактора.
Вы можете легко проверить, принимает ли ваш редактор <iframes>
. В основном вызывайте следующее и смотрите вывод:
CKEDITOR.instances.yourInstance.filter.check( 'iframe' );
>>> true // it allowed
Если это false
, то есть несколько решений для вашей проблемы:
- Включите плагин mediaembed в своем backend-редакторе (с кнопкой на панели инструментов).
- Расширьте
config.extraAllowedContent
, чтобы вернуть его обратно.
В то время как первое решение является простым, второе может оказаться сложным для вас. Правило allowedContent
для медиа-подключенного плагина выглядит следующим образом (см. код плагина):
allowedContent: 'iframe[*]' // stands for: iframe element with any attribute
Если вы добавите следующее в конфигурацию вашего backend-редактора, вы будете иметь iframes обратно в свой контент, не загружая плагин mediaembed:
config.extraAllowedContent = 'iframe[*]'
Если это решение не работает для вас, предоставьте конфигурацию редакторов и версию CKEditor, чтобы люди могли вам помочь.
Ответ 2
CKEDITOR.config.allowedContent = true;
работайте для меня.