Запрет CKEditor от форматирования кода в исходном режиме - PullRequest
20 голосов
/ 17 мая 2010

Как вы можете предотвратить любое автоматическое форматирование в 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 в двух разныхТеги комментариев, чтобы остаться нетронутыми.

Ответы [ 5 ]

5 голосов
/ 30 октября 2012

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

config.protectedSource = [/\r|\n/g];
5 голосов
/ 11 июня 2011

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

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>
1 голос
/ 06 августа 2011

Я решил эту проблему, просто окружив внутренний выход страницы редактирования формы условным значением переменной $ _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>
0 голосов
/ 12 июля 2012

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

...