Запретить CKEditor форматировать код в исходном режиме

Как вы можете предотвратить любое автоматическое форматирование в CKEditor при просмотре в исходном режиме?

Мне нравится редактировать исходный код HTML напрямую, а не использовать интерфейс WYSIWYG, но всякий раз, когда я пишу новые строки или размещаю теги с отступом, все это форматируется, когда я переключаюсь в режим WYSIWYG, а затем снова возвращаюсь в исходный режим.

Я наткнулся на билет разработчика CKEditor, Сохранить форматирование элементов 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 в двух разных тегах комментариев, чтобы остаться нетронутым.


person Lev    schedule 17.05.2010    source источник
comment
Вероятно, этот билет относится к вашей проблеме: dev.fckeditor.net/ticket/3260   -  person piotr.d    schedule 16.06.2010
comment
Лев: эй, вопрос довольно старый... у тебя есть какое-нибудь решение?   -  person    schedule 30.03.2011
comment
Нет, к сожалению, я не нашел решения, которое искал, так как разработчик CKEditor сообщил мне, что комментарии удаляются с их конца (именно поэтому мое лучшее решение все еще не сработало). Вместо этого я добавил меню выбора над текстовым полем, где пользователь мог переключаться между форматированным текстом и редактированием обычного текста, и я просто убивал редактор, если он перешел в режим обычного текста. Не очень приятное решение, но оно, по крайней мере, позволяет избежать проблем, которые представлял CKEditor. ›_‹   -  person Lev    schedule 17.04.2011
comment
В настоящее время я пытаюсь запретить ckeditor форматировать исходный код. Я нахожу это раздражающим и бесполезным. Почему я хочу писать в исходном режиме только для того, чтобы мой исходный код был изменен? Я ненавижу приложения/плагины, которые предполагают, что вы не знаете, что делаете, и пытаются сделать все за вас!!!!   -  person willdanceforfun    schedule 24.05.2012
comment
Я предполагаю, что для этой проблемы по-прежнему нет собственного решения CKEditor. Из того, что я мог почерпнуть на сайте поддержки ckeditor, краткий ответ заключается в том, что CKEditor всегда будет переформатировать то, что он считает недействительным, или, точнее, недопустимым для редактора wysiwyg, HTML. Я понимаю, что иначе wysiwyg не сработает, поэтому я спокойна с этим. Если вам нужен немодифицированный html, вам нужно использовать текстовое поле. Если это неверно, пожалуйста, дайте мне знать, но я считаю, что это правильно.   -  person MrBoJangles    schedule 01.07.2013
comment
Возможно, браузер интерпретирует комментарий в Javascript как комментарий и игнорирует код в регулярном выражении между первым открывающим комментарием и последним конечным комментарием? CKEditor даже не увидит полный параметр функции. Просмотрите исходный текст в браузере с подсветкой синтаксиса, таком как Chrome, чтобы увидеть, интерпретирует ли он комментарий. Попробуйте создать новый тег, например <code> (который является настоящим HTML-тегом), и вместо этого защитите его. Или попробуйте соединить несколько строк вместе, чтобы сформировать комментарий, например "<!" + "-- src" + ....   -  person Chloe    schedule 20.03.2016


Ответы (5)


Мое решение состояло в том, чтобы использовать комментарии в моей системе, но перед отправкой содержимого страницы в 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]

Надеюсь, это поможет!

person Mikhail Bunkin    schedule 11.06.2011

Я хотел сохранить новые строки в своем исходном коде, и функция protectedSource хорошо для этого подходит. Я добавил это в свой config.js:

config.protectedSource = [/\r|\n/g];
person Todd Kamin    schedule 30.10.2012

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>
person Hari Das    schedule 28.07.2016

Я решил эту проблему, просто окружив внутренний вывод страницы формы редактирования условным условием переменной $_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>
person AnOldMan    schedule 06.08.2011

Помогает ли этот ответ? В основном вы можете отключить опции добавления javascript, похоже.

person Alex J    schedule 12.07.2012