- 后台管理员可见,但前端用户不可见:这是最常见的需求,比如用于记录提交时间、IP地址、用户ID等信息,这些数据不需要用户填写或看到。
- 前后端都完全隐藏:用于存储一些系统处理时需要的固定值或中间数据。
下面我将为你详细介绍这两种隐藏方法,并提供一个完整的最佳实践案例。
使用 type='hidden' 属性(推荐)
这是最标准、最简单的方法,适用于 前端用户不可见,但后台管理员可见 的场景。
操作步骤:
-
进入自定义表单管理
- 登录你的 DedeCMS 后台。
- 在左侧菜单栏中找到 【核心】 -> 模型管理】。
- 在页面中,点击 【自定义表单】 选项卡。
-
添加或编辑字段
- 如果是新表单,点击右上角的 【增加一个自定义字段】。
- 如果是已有表单,找到你想要隐藏的字段,点击其后的 【管理】 -> 【修改】。
-
设置字段属性 在弹出的字段编辑界面中,进行如下设置:
- 字段名:填写英文字段名,如
ipaddress、subtime等,这个名很重要,用于后续获取数据。 - 字段类型:选择
文本,对于隐藏字段,通常文本类型就足够了。 - 字段说明:填写字段的描述,如“提交IP地址”、“提交时间”,这个说明会显示在后台列表中。
- 前台显示:这是最关键的一步! 选择
否,这样,在前端表单模板中,这个字段就不会被显示出来。 - 参数设置:将
表单提示文字留空。 - **高级选项 ->
表单控件:选择hidden,这是隐藏字段的核心属性,它会在前端生成一个<input type="hidden">
- 字段名:填写英文字段名,如
-
保存字段 点击页面底部的 【保存】 按钮。
前端模板调用:
完成上述步骤后,DedeCMS 会自动在前端表单的 HTML 代码中生成一个隐藏的 input 标签,你无需在模板中手动添加。
<input type="hidden" name="ipaddress" id="ipaddress" value="">
后台自动填充数据(进阶)
很多时候,我们隐藏的字段需要自动填充动态数据,当前时间 或 用户IP地址,这需要结合修改处理表单提交的 PHP 文件来实现。
操作步骤:
-
完成方法一的步骤:按照方法一,创建一个类型为
hidden的字段,subtime(提交时间)。 -
找到并修改处理文件
- 在你的网站根目录下,找到处理自定义表单提交的 PHP 文件,这个文件通常位于
/plus/目录下,名为diy.php。 - 重要提示:在修改任何核心文件之前,务必备份一份原文件,以防出错。
- 在你的网站根目录下,找到处理自定义表单提交的 PHP 文件,这个文件通常位于
-
修改
diy.php文件 用代码编辑器打开/plus/diy.php文件,找到类似下面这行代码(大约在第 40 行左右):$addvar = array(); foreach($dede_fields as $field=>$fielddata) { if($fielddata!='' && $addvalue[$field]!='') { $addvar[$field] = FilterSearch($addvalue[$field]); $addvar[$field] = addslashes($addvar[$field]); } }在这段代码的
foreach循环之前或之后,添加你自己的逻辑来为隐藏字段赋值。示例1:自动填充当前时间
// ... 原有代码 ... // 添加:为隐藏字段 'subtime' 自动填充当前时间 $addvar['subtime'] = time(); // 使用时间戳 // 或者格式化日期:$addvar['subtime'] = date('Y-m-d H:i:s'); foreach($dede_fields as $field=>$fielddata) { // ... 原有代码 ... }示例2:自动填充用户IP地址
// ... 原有代码 ... // 添加:为隐藏字段 'ipaddress' 自动填充IP地址 $addvar['ipaddress'] = GetIP(); // DedeCMS内置函数获取IP foreach($dede_fields as $field=>$fielddata) { // ... 原有代码 ... } -
保存并测试 保存修改后的
diy.php文件,当用户提交表单时,subtime和ipaddress字段会自动被填入当前时间和IP地址,而用户在前端完全无感知。
最佳实践:一个完整的例子
假设我们要创建一个“在线报名”表单,需要记录提交者填写的姓名、电话,以及后台才能看到的提交时间和IP。
步骤 1:在后台创建字段
- 进入 【核心】 -> 模型管理】 -> 【自定义表单】。
- 点击 【增加一个自定义字段】。
- 字段名:
name - 字段类型:
文本 - 前台显示:
是 - 表单提示文字:
请输入您的姓名 - 保存。
- 字段名:
- 再次点击 【增加一个自定义字段】。
- 字段名:
tel - 字段类型:
文本 - 前台显示:
是 - 表单提示文字:
请输入您的联系电话 - 保存。
- 字段名:
- 再次点击 【增加一个自定义字段】。
- 字段名:
subtime - 字段类型:
文本 - 前台显示:
否 - 表单控件:
hidden - 字段说明:
提交时间 - 保存。
- 字段名:
- 再次点击 【增加一个自定义字段】。
- 字段名:
ipaddress - 字段类型:
文本 - 前台显示:
否 - 表单控件:
hidden - 字段说明:
用户IP - 保存。
- 字段名:
步骤 2:修改 diy.php 文件
打开 /plus/diy.php,在 foreach 循环前添加自动填充代码:
// 在 foreach($dede_fields as $field=>$fielddata) 之前添加
$addvar['subtime'] = date('Y-m-d H:i:s');
$addvar['ipaddress'] = GetIP();
步骤 3:创建前台模板
- 进入 【模板】 -> 【自定义表单】。
- 点击 【增加一个自定义表单模板】。
- 中,编写你的表单 HTML 代码。只需包含需要用户填写的字段。
<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" /> {!-- 这里的值1是你的自定义表单ID,在列表页可以看到 --}
<input type="hidden" name="do" value="2" />
<p>姓名:<input type='text' name='name' id='name' style='width:250px' class='intxt' /></p>
<p>电话:<input type='text' name='tel' id='tel' style='width:250px' class='intxt' /></p>
<p><input type='submit' name='submit' value='提 交' class='coolbg' /></p>
</form>
注意:
action、diyid、do这些隐藏字段是 DedeCMS 自定义表单提交所必需的,必须保留。- 我们不需要为
subtime和ipaddress手动添加 input 标签,因为它们是hidden类型,且diy.php会自动填充。
步骤 4:查看后台数据
用户提交表单后,你可以在后台 【核心】 -> 【自定义表单】 中看到提交的数据列表,每一行都会显示用户填写的 name 和 tel,以及系统自动填写的 subtime 和 ipaddress。
| 需求场景 | 实现方法 | 关键设置 |
|---|---|---|
| 前端用户不可见,后台可见 | 方法一 | 在字段管理中,设置 前台显示=否 和 表单控件=hidden。 |
| 后台自动填充动态数据 | 方法二 | 在 /plus/diy.php 文件中,为隐藏字段手动赋值(如 $addvar['field'] = value;)。 |
| 最佳实践(推荐) | 方法一 + 方法二 | 结合使用,先创建好 hidden 类型的字段,再修改 diy.php 实现数据自动填充。 |
通过以上方法,你就可以灵活地在 DedeCMS 自定义表单中隐藏任何你需要的字段了。
