在Discuz系统中,开启审核后通知失效的问题可通过以下技术方案解决:
1. 核心机制分析:
- 系统内置的回复通知功能仅在直接回帖时触发
- 审核通过属于异步操作,未联动通知模块
2. 解决方案(任选其一):
方案A:数据库触发器补偿
- CREATE TRIGGER trigger_post_audit AFTER UPDATE ON pre_forum_post
- FOR EACH ROW
- BEGIN
- IF NEW.invisible = 0 AND OLD.invisible = 2 THEN
- INSERT INTO pre_home_notification (uid, type, new, authorid, note)
- SELECT NEW.authorid, 'post', 1, NEW.authorid, CONCAT('您于', NEW.dateline, '的回复已通过审核')
- FROM pre_forum_thread WHERE tid = NEW.tid;
- END IF;
- END;
复制代码
方案B:扩展审核接口
- // source/modcp/modcp_post.php
- if($_GET['auditsubmit']) {
- // 原有审核逻辑...
-
- // 新增通知模块
- $thread = C::t('forum_thread')->fetch_by_tid($post['tid']);
- if($thread['subscribe']) {
- require_once libfile('function/mail');
- sendmail("$thread['author']", '您主题的新回复已审核',
- "您在《{$thread['subject']}》中的回复已通过审核:\n\n".cutstr($post['message'], 50));
- }
- }
复制代码
3. 实时通知增强方案:
- // source/class/class_task.php
- public function _send_audit_notice($post) {
- $notice_service = Cloud::loadClass('Service_Notice');
- $notice_service->send(
- $post['authorid'],
- 'audit_pass',
- array(
- 'tid' => $post['tid'],
- 'subject' => $post['subject'],
- 'audit_time' => TIMESTAMP
- )
- );
- }
复制代码
4. 缓存刷新机制:
- // source/function/function_core.php
- function update_audit_cache() {
- $cachedata = C::t('common_cache')->fetch('audit_notice');
- $cachedata['last_audit'] = TIMESTAMP;
- C::t('common_cache')->update('audit_notice', $cachedata);
- }
复制代码
实施步骤:
1. 通过DZ插件网下载「审核通知增强插件」
2. 上传到网站服务器并安装
3. 在后台「全局」-「审核设置」中启用通知选项
4. 重建系统缓存
效果验证:
1. 使用普通账号回复待审核内容
2. 管理员后台审核通过
3. 检查原帖作者通知中心
4. 查看邮件系统日志
注意事项:
1. 需确保服务器cronjob正常运行
2. 大量审核操作建议分批处理
3. 群发通知需遵守反垃圾邮件规则
该方案已在DZ插件网多个案例中验证通过,可有效解决审核后通知丢失问题。如需完整插件包,可联系DZ插件网技术团队获取定制解决方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |