Я выполняю административную функцию для работы с 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 + "/";