使用JS动态自定义CKFinder路径,可以吗?

时间:2014-06-11 09:46:48

标签: javascript php ckeditor ckfinder

我正在使用管理功能来处理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仅在管理人员登录后才可用。

4 个答案:

答案 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 + "/";