Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2014, 23:19   #1
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию Настройка CKEditor и нестандартные теги

Хочу реализовать обработку тега <cut /> для СKEditor.
Нарисовал плагин:
Код:
CKEDITOR.plugins.add( 'pagecut',
{
    init: function( editor )
    {	    
            CKEDITOR.addCss("cut {display:block; height: 2px;width: 100%;background: #DDDD99;}");
	
            editor.addCommand( 'insertPagecut',
            {
                exec: function( editor )
                {                                    
                    var element = CKEDITOR.dom.element.createFromHtml( '<cut />' );
		    element.unselectable();
                    editor.insertElement( element );
                }
            });
            
            editor.ui.addButton( 'Pagecut',
            {
                label: 'Вставить кат',
                command: 'insertPagecut',
                icon: this.path + 'images/icon.png'
            } );
    }
} );
В редакторе все работает, но есть одна загвоздка. В редакторе при вставке тега происходит обработка. и в результате в html появляется такая вещь:

Код HTML:
<p>Это текст одного абзаца, тут ставим кат,<cut></cut>он оказывается в середине абзаца</p>
Вопрос.
1. Как отключить обработку тега? (Нужно чтобы в редакторе вставлялось именно <cut />)
2. Тег оказался в середине абзаца. Как запретить это? Тег не должен быль внутри других тегов.
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Старый 25.02.2014, 23:40   #2
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

В общем перерыл всю документацию по редактору. Уже было совсем решил бросить эту затею... Но тут мой взгляд упал на строки:
Цитата:
CKEDITOR.dtd
Holds and object representation of the HTML DTD to be used by the editor in its internal operations.
Each element in the DTD is represented by a property in this object. Each property contains the list of elements that can be contained by the element. Text is represented by the # property.
Эврика!!! Копать сюда.

Основательно изучив, это раздел была определена необходимость вклюсения следующих строк:
Код:
CKEDITOR.dtd.$empty['cut']=1;//самозакрывающийся тег
CKEDITOR.dtd.$nonEditable['cut']=1;//запрет редактирования
CKEDITOR.dtd.$object['cut']=1;//тег, является объектом, выделяется только целиком
Однако на этом помощь документации закончилась...
Но осталось запретить наследование моего тега другими элементами. Ну думаю, копать-то уже понятно куда. Открыл исходники, нашел описание dtd и выяснилось, что надо добавить еще строку:
Код:
CKEDITOR.dtd['cut']={};
В итоге плагин стал вести себя так как задумывалось:

Конечный вариант такой:

Код:
CKEDITOR.plugins.add( 'pagecut',
{
    init: function( editor )
    {	    
            CKEDITOR.addCss("cut {display:block; height: 2px;width: 100%;background: #DDDD99;}");
	    CKEDITOR.dtd['cut']={};
	    CKEDITOR.dtd.$empty['cut']=1;
	    CKEDITOR.dtd.$nonEditable['cut']=1;
	    CKEDITOR.dtd.$object['cut']=1;
            editor.addCommand( 'insertPagecut',
            {
                exec: function( editor )
                {                                    
                    var element = CKEDITOR.dom.element.createFromHtml( '<cut />' );
		   // element.unselectable();
                    editor.insertElement( element );
                }
            });
            
            editor.ui.addButton( 'Pagecut',
            {
                label: 'Вставить кат',
                command: 'insertPagecut',
                icon: this.path + 'images/icon.png'
            } );
    }
} );
Я довольно сильно напрягся, чтобы найти решение. Поэтому поэтому добавил его сюда, и надеюсь, что оно кому-то пригодится.
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Настройка WYSIWYG редактора ckeditor Vitaliy> JavaScript, Ajax 0 07.08.2013 10:02
Вопрос по CKEditor 3.х. для профессионалов barakh-d PHP 5 11.03.2012 19:01
Плагин на CKEDITOR Vlad2068 JavaScript, Ajax 6 18.01.2012 18:31
CKEditor 3 m_hamlet PHP 0 01.03.2011 16:34
Не совместимость mysql и ckeditor Drek PHP 13 08.01.2010 22:41