You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CKFinder 3中传入参数打开对应编辑页的指定文件夹?

问题分析与解决方案

核心问题:你打开CKFinder模态框时,未将当前页面的dir参数传递给CKFinder后端入口,导致config.php无法获取到$_GET['dir']参数。以下是具体修复步骤:

1. 前端传递dir参数到CKFinder

当前的CKFinder.modal()调用未携带自定义参数,需先从当前页面URL提取dir值,再通过url配置项将参数附加到CKFinder入口地址。

修改JavaScript代码:

var button1 = document.getElementById( 'ckfinder-galerie' );

button1.onclick = function() {
    selectFileWithCKFinder( 'ckfinder-input-1' );
};

// 新增:从当前URL提取指定参数的工具函数
function getUrlParam(name) {
    const params = new URLSearchParams(window.location.search);
    return params.get(name);
}

function selectFileWithCKFinder( elementId ) {
    // 获取当前页面的dir参数
    const dirParam = getUrlParam('dir');
    
    CKFinder.modal( {
        chooseFiles: true,
        width: 800,
        height: 600,
        // 关键:将dir参数附加到CKFinder入口URL(替换为你的实际CKFinder路径)
        url: '/ckfinder/ckfinder.php' + (dirParam ? `?dir=${encodeURIComponent(dirParam)}` : ''),
        onInit: function( finder ) {
            finder.on( 'files:choose', function( evt ) {
                var file = evt.data.files.first();
                var output = document.getElementById( elementId );
                output.value = file.getUrl();
            } );

            finder.on( 'file:choose:resizedImage', function( evt ) {
                var output = document.getElementById( elementId );
                output.value = evt.data.resizedUrl;
            } );
        }
    } );
}

2. 修正后端config.php代码

你的config.php存在两个问题:$galleryDir未初始化(无参数时会触发未定义变量错误),调试用的die()会直接终止程序。修改后的代码如下:

// 先初始化变量,避免无参数时的错误
$galleryDir = '';
if(isset($_GET['dir'])) {
    // 安全过滤:防止目录遍历攻击,仅保留合法字符
    $safeDir = preg_replace('/[^a-zA-Z0-9_\-]/', '', $_GET['dir']);
    $galleryDir = '/' . $safeDir;
}

$config['resourceTypes'][] = array(
    'name'              => 'Photos',
    'directory'         => 'photos' . $galleryDir,
    'maxSize'           => 0,
    'allowedExtensions' => 'bmp,gif,jpeg,jpg,png',
    'deniedExtensions'  => '',
    'backend'           => 'default'
);

其他可行方案(Session传递参数)

若不想通过URL暴露参数,可使用Session传递:

  1. 在当前编辑页面的PHP代码中存入Session:
session_start();
// 同样需做安全过滤
$safeDir = preg_replace('/[^a-zA-Z0-9_\-]/', '', $data['gallery']);
$_SESSION['ckfinder_target_dir'] = $safeDir;
  1. 在config.php中读取Session值:
session_start();
$galleryDir = '';
if(isset($_SESSION['ckfinder_target_dir'])) {
    $galleryDir = '/' . $_SESSION['ckfinder_target_dir'];
    // 用完销毁,避免后续请求受影响
    unset($_SESSION['ckfinder_target_dir']);
}

内容的提问来源于stack exchange,提问作者Grégory Santana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:08:18