Один диалог загрузки — две цели?

Используя CKeditor 3, я создал функции обработки изображений:
получатель загрузки (filebrowserUploadUrl) и диалоговое окно просмотра изображений (filebrowserBrowseUrl)
— оба работают отлично

НО, конечно, мои пользователи хотят большего... У нас есть две базы данных изображений: общая и частная
. Браузер изображений позволяет пользователю выбирать изображения из любой из них.

Мой получатель загрузки (php) может легко поместить новое изображение в любой из этих контейнеров.
- но как я могу позволить пользователю выбрать, какой из них?

Три идеи, каждая из которых связана с изменением вкладки диалогового окна загрузки ( type=file + upload-button)
. Добавление селектора цели:

Using two different upload-buttons: (Upload to Common) and (Upload to Private)  
both pointing to the same filebrowserUploadUrl but adding a parameter:  
&target=C or &target=P

or

A couple of "radio switches": Common or Private  
- essentially doing the same: Adding &target=(P or C)  
with one of them selected by default, so the user can't break it by negligence...

or

Just a single checkbox: Private (or not) ~ adding &target=P (or not)

Я действительно пытался (мои пальцы кровоточат, и меня дважды вырвало от ярости!), но как разработчик javascript, не использующий jQuery, я просто не могу во всем этом разобраться. Когда я добавляю текстовое поле, оно отображается просто отлично:)
- но не в фактической форме загрузки (в iframe), которая по-прежнему содержит только поле type=file ?!?

Поэтому я был бы признателен за пример того, как изменить вкладку диалогового окна загрузки, чтобы выполнить это?

У меня есть готовая платформа для запуска (я думаю):

CKEDITOR.on( 'dialogDefinition',
 function( ev )
 {
 var dialogName = ev.data.name;
 var dialogDefinition = ev.data.definition;

 if ( dialogName == 'image' )
   {
   var infoTab = dialogDefinition.getContents( 'Upload' );
   infoTab.add({

     what ?


person T4NK3R    schedule 06.08.2010    source источник


Ответы (1)


Решил сам, но пришлось немного помучиться :)

Я думаю, что здесь может быть ошибка в CKeditor (или, может быть, это задумано..)
Добавление новых полей (будь то в image.js или через CKEDITOR.on('dialogDefinition'..) они просто не переводятся в новые поля в самой форме загрузки в iframe (баг или фича?)

ТАК, я добавил один флажок (Private?not) в /plugins/image/dialogs/image.js
в разделе (id: 'Upload',) между полем файла и кнопкой, с событием onClick, которое делает дело трудным путем:

{
    type : 'checkbox',
    id : 'PrivateFlag',
    label: 'Private',
    checked : false,
    onClick: function()
       {
       var theFrame = document.getElementById("125_fileInput");
       var theDoc = theFrame.contentDocument || theFrame.contentWindow.document;
       var theForm = theDoc.forms[0];
       var action = theForm.getAttribute("action"); // alert("pre:"+theForm.getAttribute("action"));

       if (action.indexOf("&target=P") == -1)
          action += "&target=P";
       else
          action = action.replace("&target=P","");

       theForm.setAttribute("action",action); // alert("post: "+theForm.getAttribute("action"));
       }
},

Это работает (по крайней мере, пока идентификатор iframe равен «125_fileInput»)

IE-модификация (разумеется):

if (navigator.appName == 'Microsoft Internet Explorer') // aka BrokenTurd
    {
    var theFrame = document.frames[1]; // may be inaccurate in your case..
    var theDoc = theFrame.document;
    }
else
    {
    var theFrame = document.getElementById("125_fileInput");
    var theDoc = theFrame.contentDocument || theFrame.contentWindow.document;
    }
person T4NK3R    schedule 07.08.2010
comment
Если кто-то видит проблему в том, чтобы сделать это таким образом, сейчас самое время высказаться! - person T4NK3R; 07.08.2010