Проблема Tinymce - дополнительные параграфы - PullRequest
4 голосов
/ 06 марта 2011

Я пытаюсь использовать TinyMCE как часть веб-формы. Интеграция работает нормально, но как только вы отправите форму, данные, конечно, будут проверены.

Если проверка оценивается как ложная, например, какой-то другой ввод не был заполнен, то, конечно, я не хочу, чтобы пользователь повторно вводил все данные. Поэтому я передаю содержимое Tinymce обратно в перезагруженное представление.

Возникает следующая проблема:

Содержание в Tinymce Textarea: тест

Содержание в Tinymce после перезагрузки: <p>test</p>

Так что каждый раз добавляется дополнительный абзац в качестве оболочки.

Я хочу, чтобы Tinymce обработал ввод, как если бы он был вставлен в представление html, чтобы представление в виде простого текста было в порядке и не было вставлено никаких дополнительных абзацев.

Как мне этого добиться?


Спасибо за ваш ответ. Это был просто пример ввода, мне определенно нужен RTE, так как я создаю некоторые настраиваемые функции CMS. Теперь я работаю с html_entity_decode (), html поступает из базы данных, и да, я правильно фильтрую пользовательский ввод (в основном CI, но я тестировал на XSS самостоятельно, просто чтобы убедиться ...). Я не уверен, что делаю это самым элегантным способом ... но мне кажется, что мне подходит следующее:

JS Part:

<script type="text/javascript" src="<?php echo base_url();?>tinymce/jscripts/tiny_mce/tiny_mce.js"></script>


<script type="text/javascript">

$(document).ready(function(){

    tinyMCE.init({
        theme : "advanced",
        mode : "textareas",
        theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
        theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
        theme_advanced_toolbar_location : "top",
        theme_advanced_toolbar_align : "left",
        entity_encoding : "raw",
        content_css : "<?php echo base_url();?>xcss/standard_tinymce.css",
    });

});

</script>

Создание формы textarea (способ CI):

echo form_textarea('content', html_entity_decode($content));

Вот так.

Вход как:

<p><strong>test</strong></p><p>bla bla bla</p>

Теперь будет отображаться следующим образом в tinymce, если он хранится в $ content:

тест

бла бла бла


И если вы отправите форму, тогда post-data снова будет равна $ content. И именно в этот момент вам следует рассмотреть возможность проверки этих данных на наличие инъекций или атак XSS, поэтому, пожалуйста, не делайте этого одинаково, если только вы не отслеживаете, что происходит дальше ... мое решение, вероятно, не очень безопасно в ВСЕ случаи, в моем случае, это нормально, я предполагаю, но если кто-то знает лучше, я определенно желаю узнать больше об этом;)

Ответы [ 3 ]

3 голосов
/ 31 марта 2011

Вы можете указать TinyMCE не заключать содержимое в корневой тег, указав

forced_root_block : false

в опциях инициализации TinyMCE.

Однако это не рекомендуется по разным причинам, пожалуйста, прочитайте эту запись в FAQ: http://tinymce.moxiecode.com/wiki.php/TinyMCE_FAQ#TinyMCE_produce_BR_elements_on_enter.2Freturn_instead_of_P_elements.3F

2 голосов
/ 01 ноября 2012

Это довольно просто. Добавьте это к опциям инициализации tinymce

 force_p_newlines : false
1 голос
/ 07 марта 2011

Это невозможно из-за того, что tinymce (и все другие известные мне типы) нужно обернуть текст в блочные элементы, такие как p-теги или divЭто необходимо для того, чтобы иметь возможность стилизовать этот текст (одна из основных функций rte).Возможно, вы решите не использовать редактор tinymce для таких простых форм ввода, если вам не нужен HTML-код там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...