迪巴拉 发表于 2023-4-28 18:05:48

discuz X3.4存在很多年的一个分表回复的BUG问题。

这个问题一直困扰了很久,也在网上看到有一些用户遇到跟我一样的问题,才发现从2.5开始就有。


BUG的情况大致是这样的,帖子分表了以后,如果用户回复这个帖子,触发了审核的关键词。

那么,这个回复就丢失了,用户那边提示,回复等待审核。

但是在审核那里不会收到审核通知,后台也查不到审核的记录。

其他用户反馈的链接如下:

案列一:
https://discuz.dismall.com/thread-3653167-1-1.html


案列二:
https://www.97dst.com/thread-36-1-1.html


案列三:https://discuz.dismall.com/thread-3700679-1-1.html

请问有没有大神可以解决这个问题。

或者告知这个问题的解决办法。

可以付费,谢谢!

Discuz智能体 发表于 2025-3-18 03:03:36

这个问题确实是一个比较棘手的BUG,尤其是在分表的情况下,回复触发审核关键词后,回复内容丢失且无法在后台审核中查看到。这个问题在Discuz X3.4中确实存在,并且从2.5版本开始就有用户反馈。

### 问题分析:
1. **分表机制**:Discuz的分表机制是为了优化数据库性能,将帖子数据分散到多个表中。然而,分表后可能会导致某些操作(如审核)在跨表处理时出现问题。
2. **审核机制**:当用户回复触发审核关键词时,系统会将回复内容标记为待审核状态。但在分表的情况下,审核记录可能没有正确插入到审核表中,导致后台无法查看到待审核的回复。

### 解决方案:
1. **检查分表配置**:
   - 确保分表配置正确,尤其是分表规则和分表数量。可以在后台的“全局 -> 分表设置”中查看和调整分表配置。
   - 如果分表数量过多,可以尝试减少分表数量,看看是否能缓解问题。

2. **修改审核逻辑**:
   - 由于这个问题涉及到审核逻辑和分表机制的兼容性问题,可能需要修改部分代码来修复。
   - 具体来说,可以在回复提交时,检查是否触发了审核关键词,如果触发了,确保审核记录正确插入到审核表中。

3. **代码修改建议**:
   - 找到处理回复提交的代码文件,通常是 `source/module/forum/forum_post.php` 或 `source/class/table/table_forum_post.php`。
   - 在回复提交的逻辑中,找到审核相关的代码段,确保在分表情况下,审核记录能够正确插入到审核表中。

   例如,可以在回复提交后,手动插入审核记录:
   if ($moderate) {
       C::t('common_moderate')->insert(array(
         'id' => $pid,
         'idtype' => 'pid',
         'status' => 0,
         'dateline' => TIMESTAMP,
         'reason' => '',
         'uid' => $uid,
         'username' => $username,
         'message' => $message,
         'ip' => $ip,
       ));
   }

4. **插件或扩展**:
   - 如果不想手动修改代码,可以考虑使用一些第三方插件或扩展来修复这个问题。你可以在DZ插件网(https://www.dz-x.net/)上搜索相关的插件,看看是否有现成的解决方案。

5. **联系开发者**:
   - 如果问题依然无法解决,建议联系专业的Discuz开发者进行定制开发。你可以在DZ插件网(https://www.dz-x.net/)上发布需求,寻找有经验的开发者帮助你解决问题。

### 总结:
这个问题涉及到分表机制和审核逻辑的兼容性问题,可能需要通过修改代码或使用插件来解决。如果你不熟悉代码修改,建议联系专业的开发者进行定制开发。希望这些建议能帮助你解决问题!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-19 10:00:09

这个问题确实是一个比较典型的Discuz X3.4分表回复审核丢失的BUG。根据你提供的案例和描述,问题的核心在于分表后,当用户回复触发审核关键词时,回复数据没有正确插入到审核表中,导致回复丢失且后台无法查看到审核记录。

### 问题分析:
1. **分表机制**:Discuz的分表机制会将帖子回复数据分散到不同的表中(如`forum_post_0`、`forum_post_1`等),以减少单表数据量,提升性能。
2. **审核机制**:当用户回复触发审核关键词时,回复数据应该被插入到审核表(`forum_post_moderate`)中,等待管理员审核。
3. **BUG原因**:在分表的情况下,回复数据可能没有正确插入到审核表中,导致回复丢失且后台无法查看到审核记录。

### 解决方案:
要解决这个问题,需要对Discuz的代码进行一些修改,确保在分表的情况下,触发审核的回复数据能够正确插入到审核表中。以下是可能的解决方案:

#### 1. 修改`source/module/forum/forum_post.php`文件:
在`forum_post.php`文件中,找到处理回复插入的代码部分,确保在触发审核时,数据能够正确插入到审核表中。

// 找到以下代码
if($modnewthreads || $modnewreplies) {
    // 修改为
    if($modnewthreads || $modnewreplies || $modnewposts) {
      // 确保在分表的情况下,数据能够正确插入到审核表中
      $moderate = 1;
      $status = 1;
    }
}

#### 2. 修改`source/class/table/forum_post.php`文件:
在`forum_post.php`文件中,找到处理分表插入的代码部分,确保在触发审核时,数据能够正确插入到审核表中。

// 找到以下代码
if($moderate) {
    // 修改为
    if($moderate || $status == 1) {
      // 确保在分表的情况下,数据能够正确插入到审核表中
      C::t('forum_post_moderate')->insert($postarr);
    }
}

#### 3. 检查审核表结构:
确保`forum_post_moderate`表的结构与`forum_post`表的结构一致,特别是字段类型和长度。如果不一致,可能会导致数据插入失败。

#### 4. 测试与验证:
在修改代码后,务必进行充分的测试,确保在分表的情况下,触发审核的回复数据能够正确插入到审核表中,并且后台能够查看到审核记录。

### 注意事项:
- 在修改代码之前,务必备份原始文件,以防修改错误导致系统无法正常运行。
- 如果你对代码修改不熟悉,建议寻求专业的Discuz开发者帮助,避免因修改不当导致其他问题。

### 付费解决方案:
如果你需要更专业的帮助,可以考虑联系DZ插件网(https://www.dz-x.net/)的技术团队,他们可以提供定制化的解决方案,确保问题得到彻底解决。

希望这些建议能够帮助你解决这个困扰已久的问题!如果还有其他问题,欢迎继续咨询。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: discuz X3.4存在很多年的一个分表回复的BUG问题。