2014-01-27 2 views
1

CKeditor имеет встроенный просмотр и загрузку файлов. Он может быть интегрирован со многими внешними плагинами, включая CKFinder или даже KCFinder (бесплатная альтернатива).Пользовательская кнопка в браузере файлов CKEditor

enter image description here

Как я могу добавить пользовательскую кнопку на существующей панели по умолчанию? (Например, кнопка сжатия изображения под предварительным просмотром, которая вызовет мой внешний PHP-скрипт).

+0

Сжатие его в JS было бы быстрее и удобнее для пользователя. – dandavis

+0

Ну, вы могли бы также показать мне, как это сделать. Я использовал библиотеку GD для PHP для сжатия файлов изображений, чтобы, если пользователь меняет ширину и высоту в диалоговом окне, он должен создать фактический файл на сервере - для целей SEO. –

ответ

4

ОК, поэтому я прочитал код, написанный в другом ответе, но все еще не был ясен и должен был погрузиться в документацию. Наконец-то мне удалось решить эту проблему, не знаю, где ее добавить, поэтому я поместил ее в свою функцию $ (document) .ready(). Открыт для предложений на лучшее место, чтобы поставить его, но он работает:

CKEDITOR.on('dialogDefinition', function(evt) { 
    var dialog = evt.data; 
    if (dialog.name == 'image') { 
     // Get dialog we want 
     var def = evt.data.definition; 

     //Get The Desired Tab Element 
     var infoTab = def.getContents('info'); 

     //Add Our Button 
     infoTab.add({ 
      type: 'button', 
      id: 'buttonId', 
      label: 'Compress Image', 
      title: 'My title', 
      onClick: function() { 
       //Here define what to do when button is clicked. 
       //In my case, I traverse and get the inputs (dirty way). 
        var url = $(".cke_dialog_ui_vbox_child .cke_dialog_ui_text .cke_dialog_ui_labeled_content .cke_dialog_ui_input_text .cke_dialog_ui_input_text").eq(0).val(); 
        var width = $(".cke_dialog_ui_vbox_child .cke_dialog_ui_text .cke_dialog_ui_labeled_content .cke_dialog_ui_input_text .cke_dialog_ui_input_text").eq(2).val(); 
        var height = $(".cke_dialog_ui_vbox_child .cke_dialog_ui_text .cke_dialog_ui_labeled_content .cke_dialog_ui_input_text .cke_dialog_ui_input_text").eq(3).val(); 

       //Then I perform an ajax call to a Php file        
        $.ajax({ 
        url: 'path/to/compress.php', 
        data: { 
         url: url, 
         width: width, 
         height: height, 
         }, 
        type: 'post', 
        success: function(output) { 
         alert(output); 
         } 
        }); 
      } 
     }); 
    } 
}); 

EDIT:

Таким образом, в конце концов, я создал отдельный файл с именем KCFinderHelper.js, который я импортировать и использовать везде, где мне нужно Это. (мой последний код на самом деле намного длиннее, поскольку я добавил еще много функций и кнопок)

+0

Как вы получите диалог для обновления и просмотра предварительного просмотра нового файла изображения? –

+0

Просто обновите поле URL с помощью пути ссылки к вновь созданному файлу с помощью Jquery после успешного его сжатия. –

+1

Может быть что-то вроде этого (используя SetValueOf - из CKeditor), я кодирую URI, потому что некоторые из моих путей к файлу имеют пробелы (также декодируют его перед отправкой на PHP): 'var theDialog = CKEDITOR.dialog.getCurrent(); theDialog.setValueOf ('info', 'txtUrl', encodeURI ('путь/to/new/file.jpg')); ' –

0

Развернуть диалоговое окно dialogDefinition. Смотрите мой previous answer, чтобы узнать больше. Также см. Диалог existing implementation диалогового окна «Изображение», чтобы узнать, как выглядит определение.

+0

Какой файл я должен изменить? Должен ли я сделать это в config.js? –

Смежные вопросы