Предотвратить CKEditor от форматирования кода в исходном режиме
Как вы можете предотвратить автоматическое форматирование, когда в CKEditor при просмотре в исходном режиме?
Мне нравится редактировать исходный код HTML напрямую, а не использовать интерфейс WYSIWYG, но всякий раз, когда я пишу новые строки или теги макетов, как я их отступы, все это форматируется при переключении в режим WYSIWYG, а затем обратно в исходный режим еще раз.
Я наткнулся на билет разработчика CKEditor dev, Сохранить форматирование элементов ProtectedSource, которые ссылались на параметр, который, возможно, существовал один раз за раз, было бы именно то, что мне нужно. Я просто хочу знать, как полностью отключить автоматическое форматирование при редактировании в исходном режиме.
Я придумал решение, которое, как я думал, было бы безупречным (хотя и не приятным).
Я узнал о настройке protectedSource
, поэтому я подумал, что, возможно, я могу просто использовать это и создать тег комментария HTML перед всем моим HTML, а другой после него, а затем нажать регулярное выражение, обнаруживающее теги комментариев в protectedSource
, но даже это (верьте или нет) не работает.
Я пробовал свое выражение прямо в браузере вне CKEditor, и он работает, но CKEditor не защищает код, как ожидалось (я подозреваю, что это ошибка с тегами комментариев, так как я могу заставить ее работать с другими строками). Если вам интересно, это то, что я надеялся работать как работа, но не:
config.protectedSource.push( /<!-- src -->[\s\S]*<!-- end src-->/gi );
и то, что я планировал делать (для того, что, по-видимому, является отсутствием настройки для отключения форматирования в исходном режиме), было вложение всего моего HTML в прокомментированные теги следующим образом:
<!-- src -->
<div>some code that shouldn't be messed with (but is)</div>
<!-- end src -->
Мне бы хотелось услышать, есть ли у кого-нибудь предложения по этому сценарию или знаете настройки, которые я описал, или даже если кто-то может просто наполнить меня тем, почему я не могу получить protectedSource
для работы правильно с двумя комментариями.
Я действительно думаю, что это должно быть ошибкой, потому что я могу заставить так много других выражений работать нормально, и я могу даже защитить HTML в области одного тега комментария, но я просто не могу получить HTML в двух разных тегах комментариев оставайтесь нетронутыми.
Ответы
Ответ 1
Моим решением было использование комментариев в моей системе, но перед подачей содержимого страницы в CKEditor, конвертируйте их в пользовательские теги HTML. Затем, после сохранения, верните их обратно в теги комментариев.
Для вашего синтаксиса, который будет что-то вроде этого в PHP. Перед печатью содержимого страницы в текстовое поле:
$content = str_replace(array('<!-- src -->','<!-- end src -->'),array('<protected>','</protected>'),$content);
Перед сохранением полученного содержимого:
$content = str_replace(array('<protected>','</protected>'),array('<!-- src -->','<!-- end src -->'),$content);
В конфигурации CKEditor:
protectedSource:[/<protected>[\s\S]*<\/protected>/g]
Надеюсь, что это поможет!
Ответ 2
Я хотел сохранить новые строки в моем источнике, а функция protectedSource
работает хорошо для этого. Я добавил это в свой config.js
:
config.protectedSource = [/\r|\n/g];
Ответ 3
config.allowedContent=true;
выполнит трюк
Вот полный HTML-код
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CKEditor</title>
<script src="http://cdn.ckeditor.com/4.5.10/standard/ckeditor.js"></script>
</head>
<body>
<textarea name="editor1"></textarea>
<script>
CKEDITOR.config.allowedContent=true;
CKEDITOR.replace( 'editor1' );
</script>
</body>
</html>
Ответ 4
Я решил эту проблему, просто окружая внешний вывод страницы редактирования формы с условным значением переменной $_GET - когда вы нажимаете "Экспертный режим", он загружает обычную текстовую область вместо системы ckeditor. Ваш вызов объекта ckeditor будет зависеть от вашей настройки. (У меня есть пользовательский класс, который вызывает/создает объект редактора)
<div id="postdivrich" class="postarea">
<?php
if( isset( $_GET['expert'] ) )
{
print "<div style=\"text-align:right;\"><a href=\"/admin/ckeditor/edit.php?node={$nNode}\">Editor mode</a></div>\n";
print "<textarea name=\"content\" style=\"height:400px;width:{$nEwidth}px;\">{$aDoc['content']}</textarea>\n";
}
else
{
print "<div style=\"text-align:right;\"><a href=\"/admin/ckeditor/edit.php?node={$nNode}&expert=true\">Expert mode</a></div>\n";
require_once( 'admin/editor.class.php' );
$aDoc['content'] = str_replace( "\r", '', str_replace( "\n", '', nl2br( $aDoc['content'] ) ) );
$oEditor = new setEditor( $aDoc['content'], $nEwidth, "400", 'content' );
$oEditor->ShowEditor();
}
?>
</div>
Ответ 5
Помогает ли этот ответ? В принципе, вы можете отключить опции, добавляющие javascript, это выглядит.