- 修改处理程序:让 PHP 脚本能接收并保存上传的文件。
- 修改表单模板:在前端页面上添加文件上传的输入框。
- 修改后台管理:在后台能查看和管理已上传的文件。
第一步:修改处理程序 (核心步骤)
这是最关键的一步,我们需要修改 DedeCMS 处理自定义表单提交的 post.php 文件,使其具备文件处理能力。

-
找到文件 登录你的网站 FTP 或主机管理面板,找到并下载以下文件:
/plus/diy.php -
修改代码 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开
diy.php文件。 -
查找关键代码段 在文件中找到如下代码段(通常在文件中下部):
//--------------提交处理部分------------------ //用于处理前台提交的数据 if($do == 2) { $diyform->save($addarr, $diy->name); showmsg('成功提交,请等待管理员审核!', $dreferer); } -
添加文件上传处理逻辑 将上述代码块 替换 为下面的代码,我已经添加了详细的注释来解释每一部分的作用。
(图片来源网络,侵删)//--------------提交处理部分------------------ //用于处理前台提交的数据 if($do == 2) { // 1. 定义上传目录 // 建议在 /uploads 目录下创建一个专门的文件夹,如 /uploads/diy_form_files/ // 确保这个目录存在并且有 755 或 777 的写入权限 $upload_dir = DedeCMS的根目录 . '/uploads/diy_form_files/'; if (!is_dir($upload_dir)) { mkdir($upload_dir, 0777, true); } // 2. 初始化一个数组来存储所有提交的数据(包括文件信息) $addarr = array(); // 3. 遍历所有表单字段 foreach($_POST as $k => $v) { // 将非文件字段的数据添加到 $addarr 数组中 if($k != 'token' && $k != 'dosubmit') { $addarr[$k] = stripslashes($v); } } // 4. 处理文件上传 // 假设你的文件上传表单字段名为 'myfile',请根据实际情况修改 $file_field_name = 'myfile'; // 检查是否有文件被上传 if(isset($_FILES[$file_field_name]) && $_FILES[$file_field_name]['error'] == 0) { $file_info = $_FILES[$file_field_name]; // 生成安全的文件名(时间戳 + 随机数 + 原始扩展名) $file_ext = pathinfo($file_info['name'], PATHINFO_EXTENSION); $file_name = time() . mt_rand(1000, 9999) . '.' . $file_ext; $file_path = $upload_dir . $file_name; // 将文件从临时目录移动到我们指定的上传目录 if(move_uploaded_file($file_info['tmp_name'], $file_path)) { // 如果移动成功,将文件的相对路径存入 $addarr 数组 // 存储相对路径比绝对路径更好,方便网站迁移 $addarr[$file_field_name] = '/uploads/diy_form_files/' . $file_name; } else { // 如果文件移动失败,可以在这里记录错误或提示用户 // showmsg('文件上传失败,请检查目录权限或文件大小!', $dreferer); // 为了流程继续,这里我们也可以存一个错误标识,但通常建议中断 showmsg('文件上传失败,请检查服务器配置!', $dreferer); exit(); } } // 5. 调用 DedeCMS 的方法保存数据 // $addarr 数组里既包含了普通文本字段,也包含了文件的路径 $diyform->save($addarr, $diy->name); // 6. 显示成功消息 showmsg('成功提交,请等待管理员审核!', $dreferer); } -
保存文件 将修改好的
diy.php文件上传回服务器,覆盖原文件。
第二步:修改表单模板
我们需要在前端页面添加一个文件上传的输入框。
-
创建或编辑表单模板 登录 DedeCMS 后台,进入“自定义表单” -> “管理自定义表单”,选择你要修改的表单,点击“修改模板”。
-
在模板中添加文件上传框 在模板代码的适当位置(例如其他输入框的旁边),添加以下 HTML 代码:
(图片来源网络,侵删)<li> <label for="myfile">上传文件:</label> <input type="file" name="myfile" id="myfile" class="intxt" /> <span class="gray">(请上传 JPG、PDF、DOC 等格式的文件)</span> </li>代码解释:
<input type="file">:这是标准的 HTML 文件上传输入框。name="myfile":这个name属性值必须与你在第一步中修改diy.php时定义的$file_field_name变量值完全一致,这里是myfile。id="myfile":为了方便 CSS 样式和 JavaScript 操作,建议设置一个id,通常与name相同。class="intxt":为了保持与 DedeCMS 默认样式一致,可以加上这个 class。
-
保存模板 点击“保存”按钮,更新表单模板。
第三步:修改后台管理(可选但推荐)
默认情况下,后台的自定义表单列表只显示文本内容,文件路径会以普通文本显示,点击无法下载,我们需要修改模板,让它变成可点击下载的链接。
-
找到后台模板文件 登录 FTP,找到文件:
/dede/templets/diy_list.htm -
修改列表模板 用代码编辑器打开
diy_list.htm,找到显示数据列表的循环部分,通常是一个{dede:datalist} -
修改文件字段的显示方式 在循环内部,找到显示文件字段的单元格(
<td field='myfile'>),将其修改为:<td field='myfile'> {dede:field name='myfile' runphp='yes'} $url = @me; if($url != '') { // 判断是否是完整的 URL,如果不是,则拼接网站根目录 if (strpos($url, 'http') !== 0) { $url = 'https://你的网站域名' . $url; } @me = "<a href='{$url}' target='_blank'>下载文件</a>"; } else { @me = "未上传"; } {/dede:field} </td>代码解释:
{dede:field name='myfile' runphp='yes'}:这是调用myfile字段的值,并开启 PHP 解析。$url = @me;:获取当前字段的值(即文件路径)。if($url != ''):判断该字段是否有值。strpos($url, 'http') !== 0:判断路径是否已经是完整的 URL,如果不是,则手动拼接你的网站域名。请务必将https://你的网站域名替换成你自己的域名。@me = "<a href='{$url}' target='_blank'>下载文件</a>";:如果存在文件,则生成一个可点击的下载链接。@me = "未上传";:如果不存在文件,则显示“未上传”。
-
保存文件 将修改好的
diy_list.htm文件上传回服务器。
总结与检查
完成以上三步后,你的自定义表单文件上传功能就基本实现了,请按以下步骤进行检查:
- 检查目录权限:确保你创建的上传目录
/uploads/diy_form_files/具有写入权限(通常是 755 或 777)。 - 清空缓存:在 DedeCMS 后台“系统” -> “一键更新站点”或“更新缓存”,确保前台和后台的模板修改生效。
- 前台测试:打开你的表单页面,尝试填写信息并选择一个文件进行提交。
- 后台验证:登录后台,进入该自定义表单的管理界面,查看提交的记录,确认文件路径是否正确,并点击“下载文件”链接是否能成功下载。
通过以上步骤,你应该就能成功地在 DedeCMS 自定义表单中实现文件上传功能了。
