dede自定义表单附件如何上传与管理?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文
  1. 修改数据库:为dede_sysdiy表(存储自定义表单数据的表)添加一个附件字段。
  2. 修改模板:在自定义表单的模板文件中,添加一个文件上传的HTML输入框。
  3. 处理并显示附件:修改处理表单提交的PHP文件,使其能够接收、保存附件信息,并修改列表页和内容页模板来正确显示附件。

第一步:修改数据库,添加附件字段

这是最基础也是最关键的一步,我们需要告诉数据库,我们的表单需要存储一个文件信息。

dede自定义表单附件
(图片来源网络,侵删)
  1. 登录你的网站后台www.yourdomain.com/dede/)。

  2. 进入【系统】-> SQL命令行工具

  3. 在文本框中输入以下SQL语句,然后点击“查询”执行。

    ALTER TABLE `dede_sysdiy` ADD `fileurl` VARCHAR(255) NOT NULL DEFAULT '';

    语句解释:

    dede自定义表单附件
    (图片来源网络,侵删)
    • ALTER TABLE 'dede_sysdiy':表示要修改dede_sysdiy这张表,这张表存储了所有自定义表单提交的数据。
    • ADD 'fileurl' VARCHAR(255) NOT NULL DEFAULT '':表示要添加一个名为fileurl的新字段。
      • fileurl:字段名,我们约定俗成用这个名字。
      • VARCHAR(255):字段类型,用于存储文件的路径,255个字符长度足够。
      • NOT NULL DEFAULT '':表示这个字段不能为空,默认值为空字符串。

执行成功后,你的dede_sysdiy表就多了一个可以存储附件地址的列。


第二步:修改自定义表单模板,添加上传框

我们要在前端让用户能够看到并使用文件上传功能。

  1. 进入自定义表单管理:在后台,找到【核心】-> 内容模型管理 -> 自定义表单

  2. 编辑你的表单:找到你想要添加附件功能的那个自定义表单,点击后面的【修改】按钮。

    dede自定义表单附件
    (图片来源网络,侵删)
  3. 修改模板:在表单编辑页面,你会看到一个“模板内容”的文本框,这里就是用户填写表单时看到的HTML代码。

  4. 在合适的位置(比如其他输入框的后面)添加以下HTML代码:

    <p>
        <label>附件上传:</label>
        <input type="file" name="fileatt" id="fileatt" class="intxt" style="width:250px" />
        <span style="color:#F00;">* 请上传您的简历或相关作品</span>
    </p>

    代码解释:

    • <p>:一个段落标签,用于布局。
    • <label>:标签,for属性关联到inputid,点击文字可以选中文件框。
    • <input type="file" ...>:这是核心的文件上传输入框。
      • name="fileatt"非常重要! 这个name属性值是我们稍后在PHP代码中用来接收文件的关键,我们这里用fileatt作为标识。
      • id="fileatt":与labelfor属性对应。
      • class="intxt":为了保持与DedeCMS默认样式一致,可以加上这个类。
    • <span>:用于添加一些提示文字。
  5. 保存:点击页面底部的【保存】按钮。

你可以去前台刷新你的自定义表单页面,应该能看到新添加的“附件上传”选项了,此时提交了也只会保存文件名到数据库,而文件本身并没有被保存到服务器上。


第三步:处理附件并显示

最后一步,也是最复杂的一步,需要修改PHP文件来处理文件上传逻辑,并修改列表和内容页模板来显示附件。

1 修改处理文件(diy.php

这个文件负责接收表单数据并将其存入数据库,我们需要在这里加入文件上传、保存和路径记录的逻辑。

  1. 找到文件:在你的网站根目录下,找到 plus/diy.php 文件。

  2. 备份:在修改之前,务必备份这个原始文件!

  3. 修改代码:打开 diy.php 文件,找到处理表单数据的代码段(通常在文件末尾,if($do == 2) 里面),我们需要在 $diy->save($addvar); 这行代码之前,插入处理附件的代码。

    $diy->save($addvar); 之前,添加如下代码:

    // 处理附件上传
    if(!empty($_FILES['fileatt']['name']))
    {
        $upload = new Upload();
        $upload->setRootPath($cfg_basedir);
        $upload->setSubDir('uploads/diyfile'); // 设置附件上传的子目录,可以自定义,如 'uploads/resume'
        $fileinfos = $upload->uploadOne('fileatt');
        if($fileinfos)
        {
            $addvar['fileurl'] = $fileinfos['url']; // 将上传后的文件路径存入 $addvar 数组,键名 'fileurl' 要与数据库字段名一致
        }
        else
        {
            ShowMsg('附件上传失败:' . $upload->getErrorMsg(), '-1');
            exit();
        }
    }

    代码解释:

    • if(!empty($_FILES['fileatt']['name'])):判断是否有名为fileatt的文件被上传,这里的fileatt要和第二步中<input>name属性一致。
    • $upload = new Upload();:实例化DedeCMS自带的上传类。
    • $upload->setRootPath($cfg_basedir);:设置上传的根目录为网站根目录。
    • $upload->setSubDir('uploads/diyfile');强烈建议设置一个专门的子目录来存放这些附件,避免和网站其他文件混淆,你可以改成你喜欢的名字,比如uploads/resume
    • $fileinfos = $upload->uploadOne('fileatt');:执行上传,并返回文件信息。
    • if($fileinfos):如果上传成功。
    • $addvar['fileurl'] = $fileinfos['url'];最关键的一步,将上传成功后得到的文件相对路径(如 /uploads/diyfile/yourfile.pdf)赋值给$addvar数组中键为fileurl的元素,这个键名fileurl必须和我们在第一步中创建的数据库字段名完全一致。
    • else:如果上传失败,则显示错误信息并终止。
  4. 保存:保存修改后的 diy.php 文件。

当用户提交表单时,文件就会被上传到 /uploads/diyfile/ 目录下,并且文件路径会被保存到数据库的 fileurl 字段中。

2 修改列表页模板(list_diyform.htm

这个模板用于显示所有提交记录的列表。

  1. 找到文件:在后台,【模板】-> 自定义表单模板,找到你的表单对应的列表模板(通常命名为 list_diyform.htm)。

  2. 修改代码:在循环显示每一条记录的地方(通常是 {dede:list}{volist} 标签内),添加显示附件的链接。

    <tr>
        <td>{field:username/}</td> <!-- 假设有一个用户名字段 -->
        <td>{field:fileurl/}</td>  <!-- 新增:显示附件路径,但这只是路径,不是链接 -->
    </tr>

    为了让附件可以下载,我们需要使用[field:fileurl function='GetDownload(@me)'/]来处理。

    修改后的正确写法:

    <tr>
        <td>{field:username/}</td>
        <td>
            {if field:fileurl runphp='yes'}
                @me = "<a href='".@me."' target='_blank'>点击下载附件</a>";
            {else}
                @me = "未上传附件";
            {/if}
        </td>
    </tr>

    或者更简洁的写法:

    <tr>
        <td>{field:username/}</td>
        <td>
            {if field:fileurl}
                <a href="[field:fileurl/]" target="_blank">点击下载附件</a>
            {else}
                未上传附件
            {/if}
        </td>
    </tr>

    代码解释:

    • {if field:fileurl}:判断fileurl字段是否有值。
    • <a href="[field:fileurl/]" target="_blank">...</a>:如果值存在,则生成一个下载链接。[field:fileurl/]会直接输出数据库中存储的文件路径。
    • target="_blank":建议加上,点击链接会在新页面打开,通常是下载页面。
    • {else} ... {/if}:如果没有值,则显示“未上传附件”。
  3. 保存:保存模板文件。

3 修改内容页模板(diy_field.htm

这个模板用于显示单条记录的详细信息。

  1. 找到文件:在后台,【模板】-> 自定义表单模板,找到你的表单对应的内容页模板(通常命名为 diy_field.htm)。

  2. 修改代码:在合适的位置,添加显示附件的链接,逻辑和列表页类似。

    <div class="form-detail">
        <p><strong>姓名:</strong>{field:username/}</p>
        <p><strong>联系电话:</strong>{field:tel/}</p>
        <!-- 新增:附件显示部分 -->
        <p><strong>附件:</strong>
            {if field:fileurl}
                <a href="[field:fileurl/]" target="_blank">点击下载附件</a>
            {else}
                未上传附件
            {/if}
        </p>
    </div>
  3. 保存:保存模板文件。


总结与注意事项

  1. 核对字段名:确保数据库字段名、$addvar数组键名、模板中[field:xxx/]xxx都完全一致,我们这里统一使用fileurl
  2. 核对name属性:确保HTML中<input type="file" name="...">name值,与diy.php$_FILES['...']的键名一致,我们这里使用fileatt
  3. 目录权限:确保你设置的附件上传目录(如/uploads/diyfile/)存在并且有写入权限(权限值通常为755或777)。
  4. 安全考虑:此方法直接将文件路径存入数据库并显示,对于公开的表单(如访客留言)存在一定安全隐患,建议在生产环境中增加文件类型、大小限制,并对上传的文件进行重命名或安全扫描。
  5. 测试:每完成一步,都去前台进行测试,确保功能正常,先测试上传,再测试提交,最后测试列表和内容页的显示。

通过以上三个步骤,你就可以成功地为DedeCMS自定义表单添加一个功能完整的附件上传和下载功能了。

-- 展开阅读全文 --
头像
织梦上传文件大小限制怎么调整?
« 上一篇 今天
织梦网站上传路径错误如何解决?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]