Интеграция CKFinder с редактором InnovaStudio WYSIWYG - PullRequest
1 голос
/ 05 апреля 2010

Я использую InnovaStudio WYSIWYG Editor , и я пытаюсь заменить Менеджер активов InnovaStudio на CKFinder .В конфигурации редактора есть строка для того, какой URL использовать для менеджера активов.Я указал это на CKFinder.Часть, которую я не могу получить, - это заполнение поля двойным щелчком по пути к файлу из CKFinder.

Похоже, что для указания функции обратного вызова используется параметр 'func'.URL, который я вызываю: /common/ckfinder/ckfinder.html?action=js&func=setAssetValue

WYSIWYG-редактор InnovaStudio предоставляет функцию обратного вызова setAssetValue(v) для установки значения поля.Параметр v должен содержать URL-адрес.

CKFinder всплывает, как и ожидалось, когда он вызывается, но ни двойной щелчок по миниатюре, ни использование опции «select» в контекстном меню не работают.Нормальным / ожидаемым поведением является то, что CKFinder закрывается и целевое поле заполняется URL-адресом для выбранного ресурса.


Дополнительная информация: В редакторе WYSIWYG InnovaStudio есть всплывающее окнодля добавления изображения или флэш-файла к содержанию.Это всплывающее окно находится в iframe.Когда он вызывает CKFinder (или его собственный менеджер активов), это тоже в iframe.Похоже, что CKFinder ищет в области видимости главного окна, а не в фрейме изображения / flash, который фактически содержит поле, которое необходимо заполнить.

1 Ответ

0 голосов
/ 06 апреля 2010

(в некотором роде) решение

Я обнаружил, просматривая DOM с Firebug, что InnovaStudio создает объект ISWindow, в который он помещает ссылки на окна, которые он порождает. Я изменил свою функцию обратного вызова, чтобы зациклить этот объект и вызвать функцию setAssetValue() для соответствующего iframe. Это сработало, но CKEditor все еще не закрылся. Я предполагаю, что это потому, что он не «знал», как закрыть фрейм, который был внутри. Есть ли способ сообщить CKFinder, как закрыть окно, в котором оно находится? Я могу представить другие случаи, когда использование iframe было бы полезно.

Я бы предпочел, чтобы CKFinder использовал дисплей iframe, но я наконец-то заработал, используя стандартное всплывающее окно CKFinder.

Строка конфигурации редактора: oEdit1.cmdAssetManager = "parent.BrowseServerIS();";

Вспомогательные функции:

// InnovaStudio WYSIWYG Editor version
function BrowseServerIS()
{
   // You can use the "CKFinder" class to render CKFinder in a page:
   var finder = new CKFinder();
   // The path for the installation of CKFinder (default = "/ckfinder/").
   finder.BasePath = '/common/ckfinder/';
   // Name of a function which is called when a file is selected in CKFinder.
   finder.SelectFunction = SetFileFieldIS;
   // Launch CKFinder
   finder.Popup();
}

// InnovaStudio WYSIWYG Editor version
function SetFileFieldIS(fileUrl, data)
{
   for (var i in ISWindow.objs) {
      if ((null != ISWindow.objs[i].rt.frm.contentWindow)
            && ('function' == typeof ISWindow.objs[i].rt.frm.contentWindow.setAssetValue)) {
         ISWindow.objs[i].rt.frm.contentWindow.setAssetValue(fileUrl);
      }
   }
}
...