Настроить пути CKFinder динамически с помощью JS, можно ли это сделать?

Я выполняю административную функцию для работы с CKEditor v4.x и нуждаюсь в представлении файла / папки, загрузке и выборе. В настоящее время я использую CKFinder, поскольку я бы хотел, чтобы я не писал полный плагин самостоятельно. Однако для этой цели мне нужно динамически переключаться baseDir и baseUrl.

Я попробовал более старые примеры кода, например

CKFinder.setupCKEditor( editor, { basePath: '/ckfinder/', baseUrl: 'http://www.example.com/mydirectory/', baseDir: '/mydirectory/' } ); 

Но это не работает. Очевидно, вам нужно установить пути PHP (на стороне сервера). Поскольку у меня много экземпляров CKEditor на одной странице, они генерируются динамически, и все должны использовать разные пути CKFinder, это большая работа, если мне нужно изменить путь асинхронно через вызовы AJAX … Я могу, конечно, увидеть безопасность соображениями, позволяя управлять кодом на стороне клиента baseDir. Для записи это приложение и CKFinder доступно только после входа в систему административными людьми.

В нашей области CMS мы используем CKFinder.setupCKEditor (), и я не смог правильно передать переменные или флаги в файл конфигурации.

Поэтому я просто пошел туда, где установлен флаг IsAuthorized (который позволяет использовать CKFinder в функции CheckAuthentication ()), и я установил еще две переменные сеанса: 'ckfinder_baseDir' и 'ckfinder_baseUrl'.

* Обратите внимание, что у меня есть класс Config, который проверяет среду, поэтому Config::isDev() . Вы можете проверить это любым способом, который имеет смысл для вас.

 $_SESSION['IsAuthorized'] = 1; $_SESSION['ckfinder_baseUrl'] = Config::isDev() ? 'http://devurl.com/' : 'http://produrl.com'; $_SESSION['ckfinder_baseUrl'] = Config::isDev() ? '/path/to/dev/uploads/' : 'path/to/prod/uploads'; 

Затем я просто использую эти флаги в файле config.php CKFinder.

 $baseUrl = $_SESSION['ckfinder_baseUrl']; $baseDir = $_SESSION['ckfinder_baseDir']; 

Вы можете указать параметр на стороне интерфейса в определении кнопки filebrowser следующим образом:

 { type: 'button', label:'Button for filebrowser', filebrowser: { action: 'Browse', params: { 'id': '{someID}' } }, 

С помощью обсуждения Настройте baseUrl и baseDir в CKFinder. Я подошел к ответу с комментарием Тревиса.

Существует способ вызова разных параметров на стороне сервера для каждого экземпляра CKFinder, просто используя параметр GET в пути к CKFinder. Я установил идентификатор пути filebrowserpath

 filebrowserBrowseUrl: '/ckfinder/ckfinder.html?id=testdir' 

И затем в config.php:

 if ($_GET['id'] && $_GET['id'] == "testdir") { $baseDir = $baseDir . 'testdir/'; $baseUrl = $baseUrl . 'testdir/'; } 

Таким образом, каждый экземпляр CKeditor может использовать разные настройки basePath и baseUrl, а также другую конкретную конфигурацию.

в config.ascx в методе setConfig ()

  string userName = string.Empty; if (HttpContext.Current != null) userName = HttpContext.Current.User.Identity.Name; else throw new Exception("User Name is not provided"); BaseUrl = "~/Uploads/Users/" + userName + "/";