dede5.7自定义表单时间怎么设置?

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

直接修改数据库(最简单、最直接)

如果你只是想快速给已有的表单数据加上一个提交时间,并且不介意手动操作数据库,这是最快的方法。

dede5.7自定义表单时间
(图片来源网络,侵删)

操作步骤:

  1. 找到你的自定义表单数据表

    • 登录你的网站后台,进入【核心】-> 【内容模型管理】-> 【自定义表单管理】。
    • 找到你创建的那个自定义表单,点击后面的“管理”按钮。
    • 在打开的页面中,你会看到一个类似 dede_addonxx 的表名(xx 是一个数字,这是你的表单数据存储的表)。
  2. 修改表结构,添加时间字段

    • 使用 phpMyAdmin 或其他数据库管理工具登录你的数据库。
    • 找到上一步确认的 dede_addonxx 表。
    • 点击“结构”或“操作” -> “添加字段”。
    • 添加一个新字段:
      • 字段名: uptime (或者你喜欢的任何名字,如 subtime, posttime)
      • 类型: int(10)bigint(20) (存储时间戳)
      • 默认值: 0
      • 保存
  3. 修改表单提交处理文件

    dede5.7自定义表单时间
    (图片来源网络,侵删)
    • 在你的网站根目录下,找到 /plus/diy.php 文件。

    • 用代码编辑器打开它。

    • 找到处理表单数据的代码段,通常是在一个 if 条件语句里,类似 if($dsql->Execute('addsql')){...}

    • 在执行插入数据库的SQL语句之前,添加一行代码来获取当前时间戳。

    • 找到类似这样的代码:

      $inquery = "INSERT INTO `{$diy->table}` (`{$inaddfield}`) VALUES('$addvalue');";
    • $addvalue 变量中,你需要把时间戳加进去。$addvalue 是一个数组,修改代码如下:

      // 在 $addvalue 赋值之后,$inquery 之前添加
      $addvalue .= ",'".time()."'"; // 将当前时间戳拼接到值列表的末尾
      $inquery = "INSERT INTO `{$diy->table}` (`{$inaddfield}`) VALUES($addvalue);";

      注意: {$inaddfield}$addvalue 的字段和值顺序必须一一对应,因为你刚刚在表结构里添加了 uptime 字段,所以这里也要在值的末尾加上对应的时间戳。

  4. (可选)修改后台列表显示

    • 进入后台自定义表单管理页面,点击“字段管理”。
    • 添加一个新字段用于显示时间:
      • 字段名: uptime (必须和数据库字段名一样)
      • 字段类型: 单行文本
      • 前台显示:
      • 后台显示:
      • : 这里需要一个函数来转换时间戳,输入:
        function GetDateTimeMK($mtime)
        {
            if($mtime > 0)
            {
                return GetDateTime($mtime);
            }
            else
            {
                return "暂无";
            }
        }
    • 保存后,刷新你的自定义表单列表页面,就能看到“uptime”列了,并且显示的是格式化后的时间。

修改 diy.php 文件以自动记录时间(推荐)

这个方法比方法一更规范,因为它会自动为新添加的字段设置默认值,而不是手动在SQL里拼接。

操作步骤:

  1. 修改表结构(同方法一第一步)

    • dede_addonxx 表中添加一个名为 uptimeint(10) 字段。
  2. 修改 diy.php 文件

    • 打开 /plus/diy.php 文件。
    • 找到处理表单数据的核心部分,关键在于 $inaddfield$addvalue 这两个变量的构建。
    • 我们需要确保在构建这两个变量时,把我们的 uptime 字段和时间戳也包含进去。
    • 搜索类似 foreach($fieldarr as $field=>$fielddata) 的循环代码块。
    • 在这个循环之后$inquery 语句之前,添加以下代码:
      // 自动添加提交时间字段
      $inaddfield .= ", `uptime`";
      $addvalue .= " , '".time()."'";
    • 这样,无论你的表单有多少个字段,提交时都会自动把 uptime 和当前时间戳加进去,SQL语句会自动匹配。
  3. (可选)修改后台显示(同方法一第四步)

    • 和方法一一样,在后台字段管理中添加一个 uptime 字段,并设置“列表内容”为转换函数,以便在后台以可读格式显示时间。

使用DedeCMS钩子功能(最专业、最灵活)

如果你想让这个功能可以复用,或者不想频繁修改核心文件(如 diy.php),使用DedeCMS的钩子是最佳实践。

操作步骤:

  1. 创建钩子文件

    • 在你的网站根目录下创建一个新文件夹,myhooks

    • myhooks 文件夹里创建一个 PHP 文件,formtime.php

    • formtime.php 中写入以下代码:

      <?php
      /**
       * 自定义表单提交时间钩子
       */
      function diyFormTime(&$dede_addon, &$field, &$value)
      {
          // 确保我们只在处理自定义表单时执行
          if (defined('DEDEMODULE') && DEDEMODULE == 'diy')
          {
              // 获取当前时间戳
              $time = time();
              // 将时间戳添加到待插入的数据中
              // $dede_addon 是关联数组,直接添加即可
              $dede_addon['uptime'] = $time;
          }
      }
      ?>
  2. 注册钩子

    • 登录DedeCMS后台,进入【系统】-> 【系统基本参数】-> 【核心设置】。
    • 找到 “钩子文件目录” 这一项,将其值修改为你的钩子文件夹,/myhooks
    • 保存。
  3. diy.php 中调用钩子

    • 打开 /plus/diy.php 文件。
    • 在文件顶部引入钩子类,通常在 require_once(dirname(__FILE__)."/../include/common.inc.php"); 这行之后添加:
      require_once(DEDEINC.'/hook.class.php');
    • 找到执行插入数据库操作的地方,即在 if($dsql->Execute('addsql')) 之前,添加钩子调用代码:
      // 在执行插入前调用钩子
      $hook = new Hook();
      $hook->listen('diyFormSubmit', array(&$diy, &$addvar, &$addvalue));

      注意:diyFormSubmit 是一个我自定义的钩子名称,你可以换成任何你喜欢的唯一名称。

  4. 修改钩子文件以匹配调用

    • 回到你的 myhooks/formtime.php 文件,修改函数名和参数,以匹配 diy.php 中的调用。

      <?php
      /**
       * 自定义表单提交时间钩子
       */
      function diyFormSubmit(&$diy, &$addvar, &$addvalue)
      {
          // $addvar 是字段数组,$addvalue 是值数组
          // 将时间戳添加到值数组中
          $addvalue[] = time();
          // 如果需要,也可以添加到字段数组中,但通常DedeCMS会自动处理
          // $addvar[] = 'uptime';
      }
      ?>
    • 这种方式下,DedeCMS在构建SQL时会自动将新加入的 $addvalue 对应到数据库的自定义字段上(前提是数据库表结构里已经有这个字段)。

  5. (可选)修改后台显示(同方法一第四步)

    这一步是必须的,否则你在后台看不到时间,操作同方法一。


总结与建议

方法 优点 缺点 适用人群
直接修改 速度快,无需理解复杂逻辑 不规范,容易出错,升级DedeCMS后可能失效 新手,临时需求,一次性修改
修改diy.php 相对规范,能自动处理 修改了核心文件,升级DedeCMS后可能需要重新修改 有一定PHP基础,希望代码更规范的开发者
钩子功能 最专业,解耦,可复用,升级影响小 设置最复杂,需要理解DedeCMS钩子机制 专业开发者,需要长期维护或开发多功能的网站

对于绝大多数用户,我推荐使用【方法二】,它在实现效果和操作复杂度之间取得了最好的平衡,既解决了问题,又不会让代码变得过于臃肿或难以理解。

重要提醒:在修改任何文件或数据库之前,请务必备份你的网站文件和数据库!以防操作失误导致网站无法正常运行。

-- 展开阅读全文 --
头像
织梦数据库无法还原,问题出在哪?
« 上一篇 01-13
页如何调用图片缩略图?
下一篇 » 01-13

相关文章

取消
微信二维码
支付宝二维码

目录[+]