dede如何调用自定义表单数据?

99ANYc3cd6
预计阅读时长 26 分钟
位置: 首页 DEDE建站 正文

下面我将为你提供一份详尽的、从创建到调用的完整教程,涵盖最常用的两种方法:标签调用直接查询


第一步:创建自定义表单

在调用数据之前,你必须先在后台创建一个自定义表单。

  1. 登录 DedeCMS 后台

  2. 在左侧菜单栏找到 【核心】 -> 模型管理】,模型管理页面,点击右上角的 【增加一个自定义表单】

  3. 填写表单信息

    • 表单名称:给你的表单起一个名字,留言反馈在线报名 等,这个名字会保存在 dede_sysmodule 表中。
    • 数据表:系统会自动根据你输入的表单名称生成一个数据表名,dede_addonfeedback这个字段非常重要,在后续调用时需要用到,通常不需要修改。
    • 默认表单模板:可以留空,我们将在前台页面手写表单代码。
    • 列表模板:用于显示提交的数据列表,可以留空或稍后设置。
    • 会员投稿模板:一般用不到,可以留空。
    • 后台列表行数:设置在后台管理页面每页显示多少条记录。
    • 是否验证码:根据需要选择,建议开启以防垃圾信息。
    • 是否前台发布:选择“是”。
    • 其他选项:保持默认即可。
  4. 点击 【确定】 保存,你的自定义表单已经创建成功,并且数据表 dede_addonfeedback (或类似名称) 也被建好了。


第二步:在前台页面添加表单提交代码

创建完表单后,你需要在前台的某个页面(liuyan.htm)放置一个表单,让用户可以提交数据。

重要提示:DedeCMS 自定义表单的提交方式是 POST,并且必须有一个隐藏域 <input type="hidden" name="dopost" value="send" /> 来告诉系统这是一个提交动作。

示例代码 (liuyan.htm)

<form name="myform" action="/plus/diy.php" enctype="multipart/form-data" method="post">
    <input type="hidden" name="dopost" value="send" />
    <!-- 这里是你自定义的字段,字段名必须和你后台添加的一致 -->
    <p>
        <label for="name">您的姓名:</label>
        <input type="text" name="name" id="name" class="int" />
    </p>
    <p>
        <label for="tel">联系电话:</label>
        <input type="text" name="tel" id="tel" class="int" />
    </p>
    <p>
        <label for="content">留言内容:</label>
        <textarea name="content" id="content" rows="5" cols="50"></textarea>
    </p>
    <!-- 如果后台开启了验证码,就需要加上验证码 -->
    <p>
        <label for="vdcode">验证码:</label>
        <input type="text" name="vdcode" id="vdcode" class="int" style="width:50px;text-transform:uppercase;"/>
        <img src="/include/vdimgck.php" onclick="this.src='/include/vdimgck.php?'+Math.random();" alt="看不清?点击换一张" style="cursor:pointer" />
    </p>
    <p>
        <input type="submit" name="submit" value="提 交" class="btn" />
    </p>
</form>

代码解释

  • action="/plus/diy.php":所有自定义表单都提交到这个地址。
  • name="dopost" value="send"必须的隐藏域,表示执行发送操作。
  • name="name", name="tel":这里的 name 属性值必须与你第一步在后台添加字段时定义的“字段名”完全一致。
  • 验证码代码是可选的,但如果你在后台开启了验证码,就必须加上。

第三步:调用已提交的表单数据

这是你问题的核心,当用户提交数据后,这些数据会保存在 dede_addonXXX (dede_addonfeedback) 表中,现在我们来看如何调用它们。

假设你的表单数据保存在 dede_addonfeedback 表中,并且有 id (主键), name (姓名), tel (电话), content (内容), dtime (提交时间) 等字段。

使用 DedeCMS 标签调用(推荐)

这是最标准、最安全的方法,能更好地利用 DedeCMS 的缓存机制。

获取表单的中文名称(关键步骤)

DedeCMS 的标签调用需要一个 {dede:php} 标签来获取自定义表单的“模型ID”或“中文名称”,这个名称就是你第一步在“表单名称”里输入的内容。

你当时填写的表单名称是 留言反馈

编写调用代码

将以下代码放到你需要显示列表的模板文件中(list_liuyan.htm)。

<h2>用户留言列表</h2>
{dede:php}
    // 在这里填入你的自定义表单名称
    $formName = '留言反馈';
    // 获取这个表单对应的数据表名
    $dsql->SetQuery("SELECT addtable FROM `dede_sysmodule` WHERE mid = (SELECT id FROM `dede_sys_module` WHERE name='$formName')");
    $dsql->Execute();
    $addtable = $dsql->GetOne();
    $tableName = $addtable['addtable'];
    // 如果找到了表,则进行查询
    if ($tableName) {
        $sql = "SELECT * FROM `$tableName` WHERE arcrank=0 ORDER BY id DESC LIMIT 10"; // arcrank=0表示已审核,按ID降序取前10条
        $dsql->SetQuery($sql);
        $dsql->Execute();
        $items = array();
        while ($row = $dsql->GetArray()) {
            $items[] = $row;
        }
}
{/dede:php}
{dede:loop name='items' item='field'}
    <div class="liuyan-item">
        <p><strong>留言人:</strong> {$field.name} </p>
        <p><strong>联系电话:</strong> {$field.tel} </p>
        <p><strong>留言内容:</strong> {$field.content} </p>
        <p><strong>提交时间:</strong> {dede:field name='dtime' function='MyDate("Y-m-d H:i:s",@me)'/}</p>
        <hr>
    </div>
{/dede:loop}

代码解释

  • {dede:php}...{/dede:php}:执行 PHP 代码块。
  • $formName = '留言反馈';务必修改成你自己的表单名称。
  • $sql = "SELECT * FROM$tableNameWHERE arcrank=0 ORDER BY id DESC LIMIT 10";:这是核心查询语句。
    • SELECT *:查询所有字段。
    • FROM $tableName:从我们动态获取的表名查询。
    • WHERE arcrank=0非常重要arcrank 是 DedeCMS 自定义表单的审核状态字段,0 代表“已审核”,-1 代表“待审核”,如果你想只显示已通过的留言,必须加上这个条件。
    • ORDER BY id DESC:按 id 降序排列,即最新的留言在最前面。
    • LIMIT 10:限制只显示10条记录。
  • {dede:loop name='items' item='field'}:这是一个循环标签,用来遍历我们上面 PHP 代码查询出的 $items 数组。
  • {$field.name}:在循环内部,通过 {$field.字段名} 的方式来输出每个字段的值。

直接使用 PHP 查询(适用于二次开发)

如果你对 PHP 比较熟悉,或者这个调用逻辑比较复杂,可以直接在模板文件中使用 PHP 代码进行查询。

<h2>用户留言列表 (PHP直接查询)</h2>
<?php
    // 1. 引入数据库配置文件,确保 $dsql 对象可用
    // 在 DedeCMS 模板中,$dsql 全局对象已经存在,但如果不行,需要手动引入
    // require_once(dirname(__FILE__)."/../include/common.inc.php");
    // 2. 直接写死表名(不推荐,因为不灵活)
    // $tableName = 'dede_addonfeedback';
    // 3. 推荐方法:通过表单名称动态获取表名(与方法一相同)
    $formName = '留言反馈';
    $dsql->SetQuery("SELECT addtable FROM `dede_sysmodule` WHERE mid = (SELECT id FROM `dede_sys_module` WHERE name='$formName')");
    $dsql->Execute();
    $addtable = $dsql->GetOne();
    $tableName = $addtable['addtable'];
    // 4. 执行查询
    if ($tableName) {
        $sql = "SELECT * FROM `$tableName` WHERE arcrank=0 ORDER BY id DESC";
        $dsql->SetQuery($sql);
        $dsql->Execute();
        // 5. 循环输出结果
        while($row = $dsql->GetArray())
        {
            echo '<div class="liuyan-item">';
            echo '<p><strong>留言人:</strong> ' . $row['name'] . '</p>';
            echo '<p><strong>联系电话:</strong> ' . $row['tel'] . '</p>';
            echo '<p><strong>留言内容:</strong> ' . $row['content'] . '</p>';
            echo '<p><strong>提交时间:</strong> ' . date("Y-m-d H:i:s", $row['dtime']) . '</p>';
            echo '<hr></div>';
        }
    }
?>

两种方法的对比

  • 方法一(标签调用):更符合 DedeCMS 的设计思想,代码结构更清晰,易于维护。
  • 方法二(直接PHP):更灵活,可以执行更复杂的逻辑,但如果模板中 PHP 代码过多,会使模板文件变得臃肿,不易于前端人员修改。

总结与常见问题

  1. 调不到数据?

    • 检查表名:确认 dede_addonXXX 是否正确。
    • 检查审核状态:确认是否加了 WHERE arcrank=0 条件,很多用户忘记这一点,导致调不出来“待审核”状态的数据。
    • 检查字段名:在模板中调用时,{$field.name}name 是否和数据库字段名一致。
    • 检查权限:确保模板文件有读取数据库的权限。
  2. 如何分页?

    • DedeCMS 的自定义表单默认不支持像文章那样的 {dede:pagelist} 分页标签。
    • 如果需要分页,你需要手动实现,可以使用 $dsql->GetTotalRow() 获取总记录数,然后自己计算总页数,并构建 LIMIT 子句(如 LIMIT 0, 10LIMIT 10, 10),最后手动生成上一页/下一页的链接,这属于进阶开发。
  3. 如何调用单个表单详情页?

    • 你需要通过一个链接传递 idview.php?id=5
    • view.php 中,通过 GET 方式获取 id,然后用 $dsql->GetOne("SELECT * FROMdede_addonfeedbackWHERE id='$id'") 查询并显示单条数据。

希望这份详细的教程能帮助你成功调用 DedeCMS 自定义表单的数据!

-- 展开阅读全文 --
头像
模型管理系统如何高效管理内容?
« 上一篇 04-01
c语言elseif用法与if嵌套有何区别?
下一篇 » 04-01
取消
微信二维码
支付宝二维码

目录[+]