左右不逢缘 发表于 2023-6-12 19:17:53

这个赞助充值记录希望能永久保存,官方大佬能改下吗



否则每次升级都要改这里@官方大佬


方案一
修改文件/source/class/table/table_forum_order.php
找到
return DB::query('DELETE FROM %t WHERE submitdate<%d', array($this->_table, $submitdate));
修改成
return 0;

方案二
修改文件 /api/trade/notify_credit.php
找到
C::t('forum_order')->delete_by_submitdate($_G['timestamp']-60*86400);
删除这一行就行了

特别说明:下次升级完discuz系统,记得再修改一下哦,否则就被覆盖了!
————————————————
版权声明:本文为CSDN博主「土著人宁巴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lih062624/article/details/89481552

我知道答案 回答被采纳将会获得1 贡献 已有0人回答

Discuz智能体 发表于 2025-3-18 04:13:53

要实现赞助充值记录永久保存的需求,可以通过以下方案来实现:

### 方案一:修改数据库表结构
1. **备份数据**:在进行任何修改之前,请务必备份数据库和文件,以防出现问题。
2. **修改数据库表结构**:在数据库中,找到 `pre_forum_order` 表(表前缀 `pre_` 可能会根据你的配置有所不同),并修改表结构,使其不再自动删除旧记录。

   你可以通过以下 SQL 语句来修改表结构:
   ALTER TABLE pre_forum_order MODIFY submitdate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

   这将确保 `submitdate` 字段不会被自动删除。

3. **修改代码**:在 `/source/class/table/table_forum_order.php` 文件中,找到以下代码:
   return DB::query('DELETE FROM %t WHERE submitdate < %d', array($this->_table, TIMESTAMP - 86400 * 30));
   将其注释掉或删除,以防止系统自动删除30天前的记录。

   修改后的代码可能如下:
   // return DB::query('DELETE FROM %t WHERE submitdate < %d', array($this->_table, TIMESTAMP - 86400 * 30));

### 方案二:创建新的数据库表
如果你不想修改现有的表结构,可以考虑创建一个新的数据库表来存储永久保存的赞助充值记录。

1. **创建新表**:在数据库中创建一个新的表,例如 `pre_forum_order_archive`,用于存储永久保存的记录。

   你可以使用以下 SQL 语句来创建新表:
   CREATE TABLE pre_forum_order_archive (
       orderid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
       uid INT(10) UNSIGNED NOT NULL DEFAULT '0',
       username VARCHAR(255) NOT NULL DEFAULT '',
       amount DECIMAL(10,2) NOT NULL DEFAULT '0.00',
       submitdate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
       PRIMARY KEY (orderid)
   ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

2. **修改代码**:在 `/source/class/table/table_forum_order.php` 文件中,找到删除记录的代码,并将其修改为将记录插入到新表中。

   修改后的代码可能如下:
   $orders = DB::fetch_all('SELECT * FROM %t WHERE submitdate < %d', array($this->_table, TIMESTAMP - 86400 * 30));
   foreach ($orders as $order) {
       DB::insert('pre_forum_order_archive', $order);
   }
   DB::query('DELETE FROM %t WHERE submitdate < %d', array($this->_table, TIMESTAMP - 86400 * 30));

   这样,30天前的记录会被移动到 `pre_forum_order_archive` 表中,而不是被删除。

### 方案三:使用插件
如果你不想手动修改代码,可以考虑使用插件来实现这个功能。你可以在 DZ插件网(https://www.dz-x.net/)上寻找相关的插件,或者自己开发一个插件来实现这个功能。

### 注意事项
- **升级问题**:如果你修改了核心文件,每次升级时都需要重新应用这些修改。为了避免这个问题,建议使用插件或自定义模块来实现这个功能。
- **数据安全**:在进行任何数据库操作之前,请务必备份数据,以防出现问题。

希望这些方案能帮助你实现赞助充值记录永久保存的需求。如果你有其他问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-22 02:11:32

要实现赞助充值记录的永久保存,你可以通过修改Discuz的数据库表结构和相关代码来实现。以下是具体的步骤:

### 方案一:修改文件 `/source/class/table/table_forum_order.php`

1. **找到删除记录的代码**:
   在 `table_forum_order.php` 文件中,找到删除记录的代码部分。通常,删除记录的代码可能类似于:
   return DB::query('DELETE FROM %t WHERE submitdate < %d', array($this->_table, TIMESTAMP - 86400 * 30));
   这段代码的作用是删除30天前的记录。

2. **注释或删除删除记录的代码**:
   如果你希望永久保存记录,可以直接注释掉或删除这段代码。例如:
   // return DB::query('DELETE FROM %t WHERE submitdate < %d', array($this->_table, TIMESTAMP - 86400 * 30));

3. **保存文件并测试**:
   保存文件后,确保你的网站功能正常,并且不再删除旧的赞助充值记录。

### 方案二:创建新的数据库表

如果你不想修改现有的表结构,可以考虑创建一个新的数据库表来存储赞助充值记录,这样可以避免影响现有的功能。

1. **创建新的数据库表**:
   在数据库中创建一个新的表来存储赞助充值记录。例如:
   CREATE TABLE pre_forum_order_archive (
       orderid int(10) unsigned NOT NULL AUTO_INCREMENT,
       uid int(10) unsigned NOT NULL DEFAULT '0',
       username varchar(255) NOT NULL DEFAULT '',
       amount decimal(10,2) NOT NULL DEFAULT '0.00',
       submitdate int(10) unsigned NOT NULL DEFAULT '0',
       PRIMARY KEY (orderid)
   ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

2. **修改代码以插入新记录**:
   在 `table_forum_order.php` 文件中,找到插入记录的代码,并修改为同时插入到新的表中。例如:
   public function insert($data, $return_insert_id = false, $replace = false, $silent = false) {
       $result = parent::insert($data, $return_insert_id, $replace, $silent);
       if ($result) {
         DB::insert('pre_forum_order_archive', $data);
       }
       return $result;
   }

3. **保存文件并测试**:
   保存文件后,确保新的赞助充值记录同时插入到新的表中。

### 方案三:使用插件扩展功能

如果你不想直接修改核心代码,可以考虑开发一个插件来实现这个功能。通过插件,你可以扩展Discuz的功能,而不影响核心代码。

1. **创建插件**:
   在 `source/plugin/` 目录下创建一个新的插件目录,例如 `sponsor_archive`。

2. **编写插件代码**:
   在插件目录中创建 `sponsor_archive.class.php` 文件,并编写代码来监听赞助充值事件,并将记录插入到新的表中。例如:
   if (!defined('IN_DISCUZ')) {
       exit('Access Denied');
   }

   class plugin_sponsor_archive {
       public function forum_order_after_insert($param) {
         global $_G;
         $data = $param['data'];
         DB::insert('pre_forum_order_archive', $data);
       }
   }

3. **安装并启用插件**:
   在Discuz后台安装并启用这个插件,确保它能够正常工作。

### 总结

通过以上方案,你可以实现赞助充值记录的永久保存。方案一和方案二需要直接修改代码,而方案三则通过插件扩展功能,避免了直接修改核心代码的风险。根据你的需求和技术水平,选择最适合的方案即可。

如果你有更多问题或需要进一步的帮助,请随时联系我!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 这个赞助充值记录希望能永久保存,官方大佬能改下吗