dede自定义表单如何调用?

99ANYc3cd6
预计阅读时长 26 分钟
位置: 首页 DEDE建站 正文
  1. 创建自定义表单:在后台定义你需要收集的字段(如姓名、电话、邮箱、留言内容等)。
  2. 在前台页面添加表单代码:将创建好的表单嵌入到你的网页模板中,让用户可以填写和提交。
  3. 调用和展示表单数据:在后台或前台页面查看、管理用户提交的数据。

第一步:创建自定义表单

这是所有工作的基础,你需要告诉 DedeCMS 你需要收集哪些信息。

dede 自定义表单 调用
(图片来源网络,侵删)
  1. 登录 DedeCMS 后台

  2. 在左侧菜单栏找到 【核心】 -> 频道管理】

  3. 在页面右上角,点击 【自定义表单】 按钮。

  4. 添加新的自定义表单

    dede 自定义表单 调用
    (图片来源网络,侵删)
    • 点击 [增加自定义表单] 按钮。
    • 名称:给你的表单起一个名字,方便识别,在线报名”、“产品咨询”等,这个名字不会在前台显示。
    • 表单提示:这个可以留空,或者填写一些在前台显示的引导性文字。
    • 目录默认值:选择一个栏目,提交的数据会默认关联到这个栏目下,如果不需要关联,可以选择“不选择”。
    • 是否启用:务必选择“是”。
    • 表单默认排序:设置默认的排序方式,例如按 id 降序(最新的在最上面)。
    • 完成后点击 [确定] 按钮。

第二步:添加自定义表单字段

创建好表单后,你需要向其中添加具体的字段,姓名”、“电话”等。

  1. 频道管理】页面,找到你刚刚创建的自定义表单(在线报名”),点击其右侧的 [字段管理] 按钮。

  2. 增加字段

    • 在字段管理页面,点击 [增加字段]
    • 你会看到一个字段添加向导,通常有两种方式:[向导][手工],新手推荐使用 [向导]
    • 字段名:这是字段的内部名称,必须是英文或数字,name, tel, content这个名称非常重要,会在前台模板调用时用到。
    • 字段提示:在前台表单中显示给用户的提示文字,请输入您的姓名:”。
    • 字段类型:根据你的需求选择。
      • varchar:单行文本,用于姓名、电话、邮箱等。
      • text:多行文本,用于留言内容、详细描述等。
      • int:整数,可选。
      • datetime:日期时间,可选。
      • checkbox:复选框,多选。
      • radio:单选框。
      • select:下拉选择框。
      • img:图片上传。
      • file:文件上传。
    • 默认值:可以设置一个默认值,也可以留空。
    • 是否必填:如果勾选,用户提交时此字段不能为空。
    • 前台显示:务必勾选,否则该字段不会在前台表单中显示。
    • 数据校验:可以设置一些简单的校验规则,数字”、“邮箱”等。
    • 填写完毕后,点击 [保存] 按钮。
  3. 重复操作:根据你的需求,添加所有需要的字段(如 name, tel, email, content 等)。

    dede 自定义表单 调用
    (图片来源网络,侵删)

第三步:在前台页面调用表单

你需要将创建好的表单显示给用户。

使用系统标签 {dede:php}$dsql 调用(最灵活、最常用)

这是最标准也是最推荐的方法,可以完全控制表单的样式和布局。

  1. 打开你的前台模板文件index.htm, about.htm 等)。

  2. 在你希望显示表单的位置,插入以下代码:

    <form name="myform" action="/plus/diy.php" enctype="multipart/form-data" method="post">
      <input type="hidden" name="action" value="post" />
      <input type="hidden" name="diyid" value="这里填写你的自定义表单ID" />
      <input type="hidden" name="do" value="2" />
      <!-- 循环输出所有字段 -->
      {dede:php}
        $dsql = new DedeSql(false);
        $sql = "SELECT * FROM `dediypost` WHERE diyid = 这里填写你的自定义表单ID";
        $dsql->SetQuery($sql);
        $dsql->Execute();
        $fields = $dsql->GetArray();
        foreach($fields as $field) {
          if($field['fieldname'] != 'id' && $field['fieldname'] != 'typeid' && $field['fieldname'] != 'ip' && $field['fieldname'] != 'time' && $field['fieldname'] != 'arctitle' && $field['fieldname'] != 'mid' && $field['fieldname'] != 'dtime' && $field['fieldname'] != 'jumpurl') {
            echo '<div class="form-group">';
            echo '<label for="'.$field['fieldname'].'">'.$field['titile'].'</label>';
            // 根据不同类型输出不同表单元素
            if($field['fieldset'] == 'text') {
              echo '<input type="text" name="'.$field['fieldname'].'" id="'.$field['fieldname'].'" class="form-control" />';
            } elseif($field['fieldset'] == 'textarea') {
              echo '<textarea name="'.$field['fieldname'].'" id="'.$field['fieldname'].'" class="form-control" rows="5"></textarea>';
            }
            // 可以根据需要添加更多字段类型的判断,如 radio, select 等
            echo '</div>';
          }
        }
      {/dede:php}
      <button type="submit" class="btn btn-primary">提交</button>
    </form>

    代码解释

    • action="/plus/diy.php":提交地址,固定写法。
    • diyid="这里填写你的自定义表单ID"这是关键! 如何找到 ID?
      • 回到后台 【核心】 -> 频道管理】
      • 将鼠标悬停在你创建的自定义表单名称上,浏览器状态栏会显示链接,如 diy.php?diyid=1,这里的 1 就是你的 ID。
    • {dede:php}...{/dede:php}:PHP 代码块,用于从数据库读取字段信息并动态生成表单。
    • name="字段名":每个输入框的 name 属性必须与你在第二步中设置的字段名(英文)完全一致,这是后台能正确接收数据的关键。
  3. 优化代码(更简洁的写法): 上面的方法比较繁琐,DedeCMS 提供了更简洁的标签来调用自定义表单单条记录,但用于生成表单输入框时,通常还是需要结合 PHP 或手动编写,最灵活的方式还是使用 PHP 循环。

    一个更简洁的手动编写版本(适用于字段较少或固定的情况):

    <form name="myform" action="/plus/diy.php" enctype="multipart/form-data" method="post">
      <input type="hidden" name="action" value="post" />
      <input type="hidden" name="diyid" value="1" /> <!-- 假设ID为1 -->
      <input type="hidden" name="do" value="2" />
      <div class="form-group">
        <label for="name">姓名:</label>
        <input type="text" name="name" id="name" class="form-control" />
      </div>
      <div class="form-group">
        <label for="tel">电话:</label>
        <input type="text" name="tel" id="tel" class="form-control" />
      </div>
      <div class="form-group">
        <label for="content">留言内容:</label>
        <textarea name="content" id="content" class="form-control" rows="5"></textarea>
      </div>
      <button type="submit" class="btn btn-primary">提交</button>
    </form>

使用系统标签 {dede:fieldlist}(局限性较大)

这个标签主要用于在内容详情页调用与当前文章相关的自定义表单(例如招聘页面调用报名表单),通用性不强,不推荐在普通页面使用。


第四步:处理表单提交与展示数据

用户提交表单后,数据会保存在数据库中,你需要在后台查看和管理它们。

  1. 在后台查看数据

    • 登录 DedeCMS 后台。
    • 找到 【核心】 -> 【自定义表单】
    • 点击你创建的表单名称(在线报名”)。
    • 你会看到一个列表,所有用户提交的数据都在这里,你可以进行审核、删除、导出等操作。
  2. 在前台展示提交的数据(可选): 有时候你可能希望在前台展示一些用户提交的信息(比如展示一些报名成功的用户)。

    你可以使用 {dede:php}$dsql 来查询并显示数据。

    <h3>报名列表</h3>
    <ul>
      {dede:php}
        $dsql = new DedeSql(false);
        // 表 dede_diyform1 中的 '1' 是你的自定义表单ID
        $sql = "SELECT * FROM `dede_diyform1` ORDER BY id DESC LIMIT 10"; // 查询最新的10条
        $dsql->SetQuery($sql);
        $dsql->Execute();
        while($row = $dsql->GetArray()) {
          echo '<li>';
          echo '姓名:' . $row['name'] . ' | 电话:' . $row['tel'];
          echo '</li>';
        }
      {/dede:php}
    </ul>

    注意

    • dede_diyform1 这个表名是根据你的自定义表单ID生成的,格式为 dede_diyform + ID,你可以在数据库里找到它。
    • LIMIT 10 用于限制显示的数量,防止页面过长。

常见问题与解决方案

  • Q: 提交后提示“未定义表单”或跳转到首页?

    • A: 最常见的原因是 diyid 的值写错了,请务必返回后台,将鼠标悬停在自定义表单名称上,从浏览器状态栏获取正确的 ID。
  • Q: 为什么我添加的字段在前台不显示?

    • A: 检查在 字段管理 中,该字段的 前台显示 选项是否勾选。
  • Q: 为什么后台收不到数据?

    • A:
      1. 检查表单 inputname 属性是否与后台设置的字段名完全一致(注意大小写)。
      2. 检查 formaction 地址是否正确 (/plus/diy.php)。
      3. 检查 diyid 是否正确。
      4. 检查服务器目录权限,确保 /plus/diy.php 有执行权限,并且有写入数据的权限。
  • Q: 如何让提交成功后跳转到指定页面?

    • A:<form> 标签内添加一个隐藏的 input 来指定跳转地址。
      <input type="hidden" name="gotopage" value="/success.html" />

      /success.html 是你自定义的成功提示页面。

调用 DedeCMS 自定义表单的核心流程是:

后台创建表单和字段 -> 前台模板用 <form>{dede:php} 调用 -> 后台管理数据。

记住三个关键点:

  1. 表单提交地址/plus/diy.php
  2. 表单IDdiyid 的值
  3. 字段名inputname 属性值

掌握了这三点,你就可以灵活地在 DedeCMS 中使用自定义表单功能了。

-- 展开阅读全文 --
头像
C语言中switch函数如何高效实现多分支选择?
« 上一篇 02-25
dede如何调用当前栏目名称?
下一篇 » 02-25
取消
微信二维码
支付宝二维码

目录[+]