dede自定义表单日期怎么设置?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文
  1. 用户提交一个日期:比如用户填写“生日”、“活动日期”等。
  2. 系统自动记录提交时间:记录用户填写表单的精确时间。

下面我将详细讲解这两种情况的实现方法。

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

用户提交一个日期(如生日、活动日期)

这种情况需要你在制作表单时提供一个日期选择器,然后在后台管理和数据调用时正确地显示这个日期。

步骤 1:在自定义表单中添加日期字段

  1. 进入后台:登录你的 DedeCMS 后台。
  2. 找到表单管理:菜单栏 -> 核心 -> 内容模型管理 -> 自定义表单
  3. 编辑表单:找到你想要修改的自定义表单,点击后面的 [管理字段][修改]
  4. 添加新字段
    • 点击 [增加字段]
    • 字段名birthday (英文,不能有特殊字符)
    • 字段提示您的生日 (这是前端显示给用户的提示文字)
    • 字段类型【日期时间】 (这是最关键的一步,选择这个类型系统会自动提供一个日期选择器)
    • 其他选项:根据需要填写,比如是否为必填项等。
    • 点击 [保存]

你的自定义表单数据表(通常是 dede_addonxx)里就有了一个专门存储日期的字段。

步骤 2:在前端表单中显示日期选择器

DedeCMS 的自定义表单默认会根据你设置的“字段类型”自动渲染成相应的表单元素。【日期时间】 类型通常会生成一个 <input type="text"> 并附加一个 JS 日期选择器。

你只需要在模板文件(/templets/plus/post_diyform.htm)中,像调用普通文本框一样调用它即可,DedeCMS 的标签会自动处理。

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

示例代码 (post_diyform.htm):

<div class="form-group">
    <label for="birthday">您的生日:</label>
    {dede:field name='birthday' /}
    <span class="red">*</span> (如果设置了必填)
</div>

当用户在前端页面访问这个表单时,就会看到一个带有日期选择功能的输入框。

步骤 3:后台管理和数据调用

后台查看数据

在后台的自定义表单管理页面,你提交的数据会显示在列表中,日期字段会以 YYYY-MM-DD HH:MM:SS 的格式显示,非常清晰。

在首页或列表页调用数据

这是最常见的需求,你需要使用 DedeCMS 的自定义表单调用标签,并利用 strftime 函数来格式化日期显示。

基本调用标签:

{dede:loop table='dede_addon18' sort='id' row='10'}
    <p>
        提交人:[field:uname /]
        生日:[field:birthday function='strftime("%Y-%m-%d",@me)'/]
    </p>
{/dede:loop}

标签详解:

  • {dede:loop table='...' ...}: 循环调用标签。
    • table='dede_addon18': 这是关键! dede_addon18 是你的自定义表单对应的数据表,你可以在后台的 [自定义表单] -> [表单管理] 中查看每个表单对应的 表名dede_addonxx 这个 xx 是数字。
    • sort='id': 按ID排序,默认是倒序(最新的在前)。
    • row='10': 调用10条数据。
  • [field:birthday ...]: 调用名为 birthday 的字段。
  • function='strftime("%Y-%m-%d",@me)': 这是格式化日期的核心函数
    • strftime: PHP 的一个函数,用于格式化本地时间/日期。
    • "%Y-%m-%d": 这是你想要的输出格式。
      • %Y: 四位数的年份 (如 2025)
      • %m: 两位数的月份 (如 01, 12)
      • %d: 两位数的日期 (如 05, 31)
      • %H: 24小时制的小时
      • %M: 分钟
      • %S: 秒
    • @me: 这是 DedeCMS 标签系统中的固定写法,代表当前字段的原始值。

其他格式化示例:

  • 显示 年-月-日 时:分
    [field:birthday function='strftime("%Y-%m-%d %H:%M",@me)'/]
  • 只显示年份:
    [field:birthday function='strftime("%Y",@me)'/]

自动记录表单提交时间

如果你想在用户提交表单时,自动记录下他们提交的精确时间(而不是由他们自己填写),可以创建一个 datetime 类型的字段,并利用 DedeCMS 的钩子机制自动填充它。

步骤 1:添加一个自动时间字段

  1. 和场景一一样,进入 自定义表单 -> [管理字段]
  2. 增加一个新字段:
    • 字段名sendtime (或 posttime, addtime 等你喜欢的名字)
    • 字段提示提交时间 (这个提示对用户无意义,主要是方便你识别)
    • 字段类型【日期时间】
    • 勾选 【设置为系统字段】 (这一步很重要,可以避免在后台编辑时被误修改)。
    • 点击 [保存]

步骤 2:修改PHP文件以自动填充时间

DedeCMS 在处理自定义表单提交时,会调用一个特定的PHP文件,我们需要修改这个文件,在数据入库前,给 sendtime 字段赋上当前时间。

  1. 找到文件:打开 /plus/diy.php 文件。
  2. 定位代码:找到 $query = "INSERT INTO{$diy->table}".implode('', $addvalue).") VALUES('$addvalue')"; 这一行,这行代码是构造SQL语句进行数据插入的。
  3. 修改代码:在这行代码之前,添加如下代码:
// 在 $query = "INSERT INTO..." 之前添加
// 给提交时间字段赋值
$addvalue['sendtime'] = time(); // 获取当前Unix时间戳
// 如果你的字段名是 posttime, 就用 $addvalue['posttime'] = time();

完整代码片段示例:

// ... 前面的代码 ...
// 获取表单提交过来的数据
$addvalue = array();
$fieds = empty($diy->itemsets) ? $diy->fields : $diy->itemsets;
foreach($fieds as $field) {
    if($field->formtype == 'img' || $field->formtype == 'addon') {
        continue;
    }
    $addvalue[$field->fieldname] = ${'_'.$field->fieldname};
}
// ====== 在这里添加我们的自动时间代码 ======
// 如果存在 sendtime 这个字段,则自动填充当前时间
if (isset($addvalue['sendtime'])) {
    $addvalue['sendtime'] = time();
}
// ==========================================
// 准备插入数据库
$addvalue = ReplaceKey($addvalue);
$inquery = "INSERT INTO `{$diy->table}` (`".implode('`,`', array_keys($addvalue))."`) VALUES('".implode("','", $addvalue)."')";
// ... 后面的代码 ...

代码解释:

  • $addvalue 是一个关联数组,存放了所有要插入的字段名和对应的值。
  • if (isset($addvalue['sendtime'])):判断我们之前创建的 sendtime 字段是否存在。
  • $addvalue['sendtime'] = time();:如果存在,就调用 time() 函数获取当前时间的 Unix 时间戳,并赋值给 sendtime 字段。

步骤 3:调用和显示

每当用户提交表单,sendtime 字段都会被自动填入当前时间,调用方式和场景一完全一样,同样使用 strftime 进行格式化。

{dede:loop table='dede_addon18' sort='id' row='10'}
    <p>
        提交人:[field:uname /]
        提交时间:[field:sendtime function='strftime("%Y-%m-%d %H:%M:%S",@me)'/]
    </p>
{/dede:loop}
场景 字段类型 关键操作 前端标签调用
用户提交日期 【日期时间】 后台添加字段
前端模板直接调用
[field:字段名 function='strftime("格式",@me)'/]
自动记录时间 【日期时间】 后台添加字段并勾选“系统字段”
修改 /plus/diy.php,用 $addvalue['字段名'] = time(); 自动填充
[field:字段名 function='strftime("格式",@me)'/]

希望这个详细的教程能帮助你解决在 DedeCMS 自定义表单中处理日期的问题!

-- 展开阅读全文 --
头像
c语言allb c b-c
« 上一篇 02-27
c语言能否编辑html语言
下一篇 » 02-27
取消
微信二维码
支付宝二维码

目录[+]