Подтвердить что ты не робот

Предотвратить 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 в двух разных тегах комментариев оставайтесь нетронутыми.

4b9b3361

Ответ 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, это выглядит.