2014-06-11 62 views
0

我正在做一个管理功能,使用CKEditor v4.x并需要一个文件/文件夹视图,上传和选择工具。目前我正在使用CKFinder,因为我想避免自己写一个完整的插件。但为了这个目的,我需要能够动态地切换baseDir和baseUrl。使用JS动态自定义CKFinder路径,是否可以完成?

我试过旧的代码示例一样

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

但是,这是行不通的。显然你需要通过PHP(服务器端)设置路径。由于我在一个页面上有很多CKEditor实例,动态生成,并且所有应用都使用不同的CKFinder路径,所以如果我需要通过AJAX调用异步更改路径,这是一项很大的工作......我当然可以看到安全性考虑让客户端代码控制baseDir。为了记录此应用程序和CKFinder,只有在管理员登录后才可用。

回答

0

在讨论的帮助下Customize baseUrl and baseDir in CKFinder我接近了Travis评论的答案。

有一种方法可以通过在CKFinder的路径中使用GET参数来调用CKFinder的每个实例的不同服务器端设置。我设置了filebrowserpath

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

的ID,然后在config.php文件:

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

这样CKEDITOR的每个实例可以使用不同的基本路径和的baseUrl设置,以及其他特定的配置。

1

您可以指定在filebrowser按钮定义前端侧的参数如下

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

谢谢,是的,那么我的解决方案将在后端工作相同? – jtheman

+1

是的,它会将参数'id'附加到filebrowser url。 Filebrowser也动态地附加一些回调参数本身,如:CKEditor = {identifierName}&CKEditorFuncNum = 32&langCode = sk –

+0

谢谢,这进一步改进了我的解决方案! – jtheman

0

在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 + "/"; 
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']; 
相关问题