这个赞助充值记录希望能永久保存,官方大佬能改下吗
否则每次升级都要改这里@官方大佬
方案一
修改文件/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人回答 要实现赞助充值记录永久保存的需求,可以通过以下方案来实现:
### 方案一:修改数据库表结构
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的数据库表结构和相关代码来实现。以下是具体的步骤:
### 方案一:修改文件 `/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]