Как настроить ckeditor, чтобы не обтекать содержимое в блоке <p>?
Я использую ckeditor на моем веб-сайте, чтобы пользователям было легче вводить HTML.
Однако данные, возвращаемые из ckeditor, обернуты в блоки <p></p>
. (Который я не хочу.)
Есть ли какой-то параметр конфигурации, который заставляет редактор не обертывать текст ничем?
Добавьте следующее в файл config.js для CKEditor:
config.enterMode = CKEDITOR.ENTER_BR;
Пример:
...
CKEDITOR.editorConfig = function (config)
{
config.enterMode = CKEDITOR.ENTER_BR;
...
};
подробности
Настройка конфигурации, которая управляет этим поведением, основана на том, что вы хотите, чтобы происходило, когда пользователь нажимает Enter.
На всякий случай, если кто-то, кто плохо знаком с работой с HTML, прочтет это, я включу некоторые базовые объяснения связанных с этим понятий и почему тег нужно будет вставлять при нажатии клавиши Enter.
Мы знаем, что если мы введем какой-то текст в документ HTML, а затем добавим дополнительный текст в новую строку, браузер не отобразит текст в виде двух строк, он проигнорирует любые возвраты каретки и сведет несколько пробелов между символами в один пространство.
Следующий HTML:
qwer
tyui
Будет отображаться как:
qwer tyui
Поэтому редактору необходимо вставить тег HTML, чтобы сообщить браузеру, что он должен отображать вторую строку текста в новой строке.
Параметр конфигурации, который управляет этим, является config.enterMode
и он предлагает три варианта:
1 - вставить абзац
Настройка по умолчанию создает элемент абзаца при каждом нажатии Enter:
config.enterMode = CKEDITOR.ENTER_P; // inserts '<p>...</p>'
2 - вставить "div"
Вы можете создать элемент div
вместо абзаца:
config.enterMode = CKEDITOR.ENTER_DIV; // inserts '<div></div>'
3 - Вставить разрыв (настройка, которую вы ищете)
Если вы предпочитаете не переносить текст во что-либо, вы можете вставить тег разрыва строки:
config.enterMode = CKEDITOR.ENTER_BR; // inserts '<br />'
Документация CKEditor указывает, что использование настройки ENTER_BR
не рекомендуется:
Примечание. Рекомендуется использовать параметр
CKEDITOR.ENTER_P
из-за его семантического значения и правильности. Редактор оптимизирован для этого параметра.
Еще один связанный параметр "AutoParagraph"
Существует вторая настройка, которая управляет аналогичной ситуацией - config.autoParagraph
. Как это работает, зависит от настройки config.enterMode
описанной выше.
autoParagraph
определяет, будут ли встроенные элементы, такие как span
, переноситься в элемент блока (p
или div
), заданный параметром enterMode
. По умолчанию используется обтекание встроенных элементов, поэтому, если вы введете диапазон как этот (как HTML):
<span>asdfg</span>
Он будет заключен в элемент ap или div следующим образом:
<p><span>asdfg</span></p>
или это:
<div><span>asdfg</span></div>
Встроенный элемент не будет перенесен, если для этого параметра установлено значение false
или для enterMode
установлено enterMode
CKEDITOR.ENTER_BR
.
Документация CKEditor включает это примечание о config.autoParagraph
:
Примечание. Изменение значения по умолчанию может привести к непредсказуемым проблемам с юзабилити.
Еще больше настроек
Есть еще три параметра, которые в некоторой степени связаны с этой темой:
-
config.fillEmptyBlocks
-
config.forceEnterMode
-
config.ignoreEmptyParagraph
Ссылка
Полный список доступных параметров конфигурации можно найти здесь:
Я знаю, что немного опоздал в игру, но я думаю, что опция, которую ищет OP:
config.autoParagraph = false;
Ответа на этот вопрос достаточно хорошо, но, как уже упоминалось, вы не должны изменять это в основной конфигурации.
Правильный способ сделать это действительно на .replace.
то есть.
<form name="title" method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>">
<textarea id="editor2" name="editor2" rows="300"><?php echo $editor2;?></textarea>
<textarea id="editor1" name="editor1" rows="1" cols="50" onfocus="this.value=''; this.onfocus=null;">Type Tab Title Here:</textarea>
<input type="submit" value="Submit">
</form>
<script type="text/javascript">
CKEDITOR.replace( 'editor2', {
enterMode: CKEDITOR.ENTER_BR,
on: {'instanceReady': function (evt) { evt.editor.execCommand('maximize'); }},
});
</script>
Очень простое решение без какого-либо изменения конфигурации заключается в использовании
-
shift
+enter
для разрыва строки<br>
и - just
enter
приведет к появлению нового абзаца.
Преимущество в том, что вам не нужно выполнять какие-либо изменения конфигурации. Кроме того, у вас есть оба.
Если вы хотите исключить тег <p>
и хотите, чтобы в Ckeditor был только базовый инструмент редактирования, например Bold Italic надстрочный индекс и т.д., выполните следующие действия:
Я на 100% уверен в этом, так как я исследовал 36 часов непрерывно:)
Шаг 1: добавьте этот script на веб-страницу PHP
<script type="text/javascript">
CKEDITOR.replace( 'editor1', {
enterMode: CKEDITOR.ENTER_BR,
on: {'instanceReady': function (evt) { evt.editor.execCommand('');}},
});
</script>
Шаг 2: добавьте id="editor2"
и onfocus="this.value='';"
в ваше текстовое пространство, подобное этому
<textarea id="editor2" name="AsYourWish" onfocus="this.value='';">
Шаг 3: Уберите Class="ckeditor"
из Textarea.
Шаг 4: перезагрузите свою веб-страницу, если этого не произошло. Удалите кеш/историю и перезагрузите компьютер/ноутбук.
Шаг 5: Выполнено:)
Для Django-ckeditor
добавьте этот Django-ckeditor
в ваш файл settings.py
:
ENTER_P = 1 # default
ENTER_BR = 2
ENTER_DIV = 3
CKEDITOR_CONFIGS = {
'default': {
'enterMode': ENTER_BR,
},
}
Посмотрите другие вопросы по меткам ckeditor wrap word-wrap или Задайте вопрос