- 创建自定义表单:在后台定义你需要收集的字段(如姓名、电话、邮箱、留言内容等)。
- 在前台页面添加表单代码:将创建好的表单嵌入到你的网页模板中,让用户可以填写和提交。
- 调用和展示表单数据:在后台或前台页面查看、管理用户提交的数据。
第一步:创建自定义表单
这是所有工作的基础,你需要告诉 DedeCMS 你需要收集哪些信息。

-
登录 DedeCMS 后台。
-
在左侧菜单栏找到 【核心】 -> 频道管理】。
-
在页面右上角,点击 【自定义表单】 按钮。
-
添加新的自定义表单:
(图片来源网络,侵删)- 点击 [增加自定义表单] 按钮。
- 名称:给你的表单起一个名字,方便识别,在线报名”、“产品咨询”等,这个名字不会在前台显示。
- 表单提示:这个可以留空,或者填写一些在前台显示的引导性文字。
- 目录默认值:选择一个栏目,提交的数据会默认关联到这个栏目下,如果不需要关联,可以选择“不选择”。
- 是否启用:务必选择“是”。
- 表单默认排序:设置默认的排序方式,例如按
id降序(最新的在最上面)。 - 完成后点击 [确定] 按钮。
第二步:添加自定义表单字段
创建好表单后,你需要向其中添加具体的字段,姓名”、“电话”等。
-
频道管理】页面,找到你刚刚创建的自定义表单(在线报名”),点击其右侧的 [字段管理] 按钮。
-
增加字段:
- 在字段管理页面,点击 [增加字段]。
- 你会看到一个字段添加向导,通常有两种方式:[向导] 和 [手工],新手推荐使用 [向导]。
- 字段名:这是字段的内部名称,必须是英文或数字,
name,tel,content。这个名称非常重要,会在前台模板调用时用到。 - 字段提示:在前台表单中显示给用户的提示文字,请输入您的姓名:”。
- 字段类型:根据你的需求选择。
varchar:单行文本,用于姓名、电话、邮箱等。text:多行文本,用于留言内容、详细描述等。int:整数,可选。datetime:日期时间,可选。checkbox:复选框,多选。radio:单选框。select:下拉选择框。img:图片上传。file:文件上传。
- 默认值:可以设置一个默认值,也可以留空。
- 是否必填:如果勾选,用户提交时此字段不能为空。
- 前台显示:务必勾选,否则该字段不会在前台表单中显示。
- 数据校验:可以设置一些简单的校验规则,数字”、“邮箱”等。
- 填写完毕后,点击 [保存] 按钮。
-
重复操作:根据你的需求,添加所有需要的字段(如
name,tel,email,content等)。
(图片来源网络,侵删)
第三步:在前台页面调用表单
你需要将创建好的表单显示给用户。
使用系统标签 {dede:php} 和 $dsql 调用(最灵活、最常用)
这是最标准也是最推荐的方法,可以完全控制表单的样式和布局。
-
打开你的前台模板文件(
index.htm,about.htm等)。 -
在你希望显示表单的位置,插入以下代码:
<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属性必须与你在第二步中设置的字段名(英文)完全一致,这是后台能正确接收数据的关键。
-
优化代码(更简洁的写法): 上面的方法比较繁琐,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}(局限性较大)
这个标签主要用于在内容详情页调用与当前文章相关的自定义表单(例如招聘页面调用报名表单),通用性不强,不推荐在普通页面使用。
第四步:处理表单提交与展示数据
用户提交表单后,数据会保存在数据库中,你需要在后台查看和管理它们。
-
在后台查看数据:
- 登录 DedeCMS 后台。
- 找到 【核心】 -> 【自定义表单】。
- 点击你创建的表单名称(在线报名”)。
- 你会看到一个列表,所有用户提交的数据都在这里,你可以进行审核、删除、导出等操作。
-
在前台展示提交的数据(可选): 有时候你可能希望在前台展示一些用户提交的信息(比如展示一些报名成功的用户)。
你可以使用
{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。
- A: 最常见的原因是
-
Q: 为什么我添加的字段在前台不显示?
- A: 检查在 字段管理 中,该字段的 前台显示 选项是否勾选。
-
Q: 为什么后台收不到数据?
- A:
- 检查表单
input的name属性是否与后台设置的字段名完全一致(注意大小写)。 - 检查
form的action地址是否正确 (/plus/diy.php)。 - 检查
diyid是否正确。 - 检查服务器目录权限,确保
/plus/diy.php有执行权限,并且有写入数据的权限。
- 检查表单
- A:
-
Q: 如何让提交成功后跳转到指定页面?
- A: 在
<form>标签内添加一个隐藏的input来指定跳转地址。<input type="hidden" name="gotopage" value="/success.html" />
/success.html是你自定义的成功提示页面。
- A: 在
调用 DedeCMS 自定义表单的核心流程是:
后台创建表单和字段 -> 前台模板用 <form> 和 {dede:php} 调用 -> 后台管理数据。
记住三个关键点:
- 表单提交地址:
/plus/diy.php - 表单ID:
diyid的值 - 字段名:
input的name属性值
掌握了这三点,你就可以灵活地在 DedeCMS 中使用自定义表单功能了。
