我正在使用管理功能来处理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仅在管理人员登录后才可用。
答案 0 :(得分:1)
您可以在filebrowser按钮的定义中指定前端一侧的参数,如下所示
{
type: 'button',
label:'Button for filebrowser',
filebrowser: {
action: 'Browse',
params: {
'id': '{someID}'
}
},
答案 1 :(得分:1)
在我们的CMS区域,我们使用CKFinder.setupCKEditor(),我无法正确地将变量或标志传递给配置文件。
所以我只是去了'IsAuthorized'标志设置的位置(允许访问在CheckAuthentication()函数中使用CKFinder),并设置了两个以上的会话变量:'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';
然后我在CKFinder config.php文件中使用这些标志。
$baseUrl = $_SESSION['ckfinder_baseUrl'];
$baseDir = $_SESSION['ckfinder_baseDir'];
答案 2 :(得分:0)
在讨论的帮助下Customize baseUrl and baseDir in CKFinder我接近Travis评论的回答。
通过在CKFinder的路径中使用GET参数,可以为每个CKFinder实例调用不同的服务器端设置。我设置了filebrowserpath的id
filebrowserBrowseUrl: '/ckfinder/ckfinder.html?id=testdir'
然后在config.php中:
if ($_GET['id'] && $_GET['id'] == "testdir") {
$baseDir = $baseDir . 'testdir/';
$baseUrl = $baseUrl . 'testdir/';
}
这样,CKeditor的每个实例都可以使用不同的basePath和baseUrl设置,以及其他特定的配置。
答案 3 :(得分:0)
在setConfig()方法的config.ascx中
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 + "/";