CKEditor и Tickets

Всем привет, заметил проблему с работой компонента CKEditor с Tickets.

Вообщем, если к примеру создаю тикет. В содержимом отбиваю через Enter слова Тест1 Тест2 Тест3.



После публикации, захожу в редактирование. И вижу что CKEditor не видит сделанные мной абзацы. И если я пересохраню материал, то и на сайте будет точно также отображаться. (изначально все эти отступы есть, после создания тикета).



Причем, если я отключу редактор, то всё нормально.



Подскажите пожалуйста, как можно обойти или исправить данный косяк. Редакторам сайта нужно править материалы… А без редактора вообще нельзя.

В базе данных вот так прописано:

Хотелось бы, чтобы в поле content, было также, как и в introtext. Это бы решило проблему…
Павел
21 октября 2015, 08:38
modx.pro
1
2 428
0

Комментарии: 7

Павел
21 октября 2015, 15:54
0
Решения не нашёл. В итоге отключил редактор markitup в системных настройках тикетов. И прикрутил к фронтеду CKEditor
    Алексей Федоров
    21 октября 2015, 22:49
    0
    Я, может, спрошу глупость, но зачем нужен CKEditor, если есть MarkitUp?
      Максим Кузнецов
      22 октября 2015, 02:00
      +4
      Зачем нужен windows, если есть линукс?

        Павел
        22 октября 2015, 09:03
        +1
        Редакторы сайта не умеют им пользоваться, они привыкли к своему Word. А CKEditor очень похож на него)
          Алексей Федоров
          22 октября 2015, 12:34
          0
          Спасибо за разъяснения. Просто, насколько знаю, MarkitUp достаточно легко кастомизируется, но варианта под word мне и правда не встречалось.
        Александр
        15 декабря 2015, 18:39
        0
        Подскажите, как вы прикрутили CKEditor к фронтенду? с такой же задачей столкнулся.
          Максим Кузнецов
          15 декабря 2015, 19:22
          2
          0
          По своему опыту реализации такой задачи, опишу главную особенность его интеграции: единожды инициализировав редактор на форме и, впоследствии, при попытке переместить ее, используя, допустим, кнопку «ответить», редактор будет умирать. Тоже самое с ним случается при добавлении им комментария через ajax.
          Данная проблема актуальна для данного редактора и решается последовательным уничтожением в dom-e и последующей повторной инициализацией.

          Соответственно — необходимо вынести процесс создания/удаления редактора, написать свою логику работы при нажатии на кнопку «ответить» (до уничтожения формы сохранять уже введенные данные и вставлять в свежесозданную форму) и отредактировать tickets/js/web/default.js, вклинив в него нужные процессы.

          Для наглядности, приведу пример часть своего кода, которым решал данную задачу.

          Функция создания/удаления формы:
          var editor, editorText;
          	
          function createCommentEditor() {
          	if (!editor) {
          		editor = CKEDITOR.replace('comment-editor', {
          			customConfig: 'comments.config.js'
          		});
          		CKEDITOR.instances['comment-editor'].setData(editorText);
          	}
          }
          function removeCommentEditor() {
          	if (editor) {
          		editorText = editor.getData();
          
          		editor.destroy();
          		editor = null;
          	}
          }

          Первичное создании формы и логика для кнопки «ответить»:
          //первичное подключение редактора
          	createCommentEditor();
          
          	//при нажатии на кнопку "ответить"
          	$('.comment-reply > a.reply').click(function(){
          		//replyMe - класс, навешивающийся на кнопку "ответить" при первом нажатии
          		
          		//если пользователь нажал на уже активную кнопку "ответить" - возвращаем редактор на место
          		if($(this).hasClass('replyMe')) {
          			removeCommentEditor();
          			//#formWillReturn - контейнер, где по умолчанию находится форма (в дефолтном состоянии)
          			//#comment-form - айди формы редактора
          			$("#comment-form").appendTo("#formWillReturn");
          			createCommentEditor();
          			//#returnEditor - id кнопки "вернуть редактор на место"
          			$("#returnEditor").hide();
          		}
          		else {
          			//здесь переносим редактор под комментарий, на который пользователь хочет ответить
          			//кнопка "ответить" находится внутри элемента li с классом ticket-comment и атрибутом data-id=[[+id]]
          			var place = $(this).parents('li.ticket-comment').data('id');
          			removeCommentEditor();
          			
          			//у каждого элемента li.ticket-comment есть по умолчанию пустой контейнер для редактора вида <div id="comments-tree-[[+id]]"></div>
          			//вставляем в него редактор
          			$("#comment-form").appendTo("#comments-tree-"+place);
          			
          			createCommentEditor();
          			
          			//показываем кнопку "вернуть редактор на место"
          			$("#returnEditor").show();
          		}
          	});
          	
          	//при нажатии на кнопку "вернуть редактор"
          	$('#returnEditor').click(function(){
          		//удаляем все выделенные кнопки "ответить"
          		$('.comment-reply a').removeClass('replyMe');
          		removeCommentEditor();
          		$("#comment-form").appendTo("#formWillReturn");
          		createCommentEditor();
          		//возвращаем скрытому полю параметр родителя, к которому комментарий будет привязываться в случае успешного добавления
          		$('#comment-form input[name="parent"]').val(0);
          		
          		//прячем кнопку "вернуть редактор"
          		$("#returnEditor").hide();
          	});

          tickets/js/web/default.js
          var Tickets = {
          	...
          	,ticket: {
          		...
          		,save: function(form, button)  {
          			$(form).ajaxSubmit({
          				...
          				,success: function(response) {
          					$(button).removeAttr('disabled');
          					if (response.success) {
          						//Если комментарий успешно добавлен - реинициализируем форму
          						removeCommentEditor();
          						Tickets.forms.comment(false);
          						$('#comment-preview-placeholder').html('').hide();
          						//и очищаем ее
          						$('#comment-editor',form).val('');
          						
          						//после инициализации мы возвращаем форму на место, так что прячем кнопку "вернуть редактор", если она была
          						$("#returnEditor").hide();
          						$('.ticket-comment-body').removeClass('antwortComment');
          
          						// autoPublish = 0
          						if (!response.data.length && response.message) {
          							Tickets.Message.info(response.message);
          						}
          						else {
          							Tickets.comment.insert(response.data.comment);
          							Tickets.utils.goto($(response.data.comment).attr('id'));
          						}
          						
          						editorText = '';
          						
          
          						Tickets.comment.getlist();
          						prettyPrint();
          						createCommentEditor();
          						
          						...

          Данное решение было выполнено довольно давно (~начало 2014), поэтому не исключаю, что в редакторе/коде тикетсов что-то поменялось, но не уверен, что это в значительной степени изменит логику работы.

          Возможно, забыл добавить какой-то кусок кода — в случае чего пишите.

          UPD: плюс, насколько я помню, у тикетсов была проблема с подхватыванием введенных пользователем данных в форму ckeditor, но затрудняюсь сказать точнее.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7