针对您描述的Discuz!系统通知在首页无法接收的问题,结合Discuz!开发规范和常见排查方向,请按以下专业方案进行排查:
1. **模板完整性校验**
- 检查当前模板`template/当前风格/home/`目录下的`space_home.html`和`header.htm`文件
- 确认包含通知调用代码:
- <!--{subtemplate common/header_common}-->
- <div id="umenu_notice" class="vm" onmouseover="showMenu(this.id)">...</div>
复制代码
- 检查是否存在`<script src="{$_G[setting][jspath]}forum.js?{VERHASH}"></script>`脚本加载
2. **用户组权限二次验证**
- 执行SQL查询该用户权限状态:
- SELECT allowadminmessage,allowstickthread FROM pre_common_member
- WHERE uid = '目标用户ID';
复制代码
- 后台路径:用户→用户组→系统权限→勾选"允许接收管理提醒"
3. **通知通道白名单检测**
- 检查`config/config_global.php`中:
- $_config['security']['querysafe']['status'] = 1;
- $_config['security']['querysafe']['notice'] = 0; // 必须为0才能显示通知
复制代码
4. **前端事件监听诊断**
- 在浏览器控制台执行:
- console.log(typeof showWindow == 'function'); // 应返回true
- console.log($('umenu_notice').getElements('a').length); // 需大于0
复制代码
5. **通知类型过滤检测**
- 检查`source/class/class_notice.php`中:
- if(!in_array($type, array('system','userapp','manage','member'))) {
- return false; // 此处可能过滤通知类型
- }
复制代码
6. **计划任务队列验证**
- 检查`source/function/function_core.php`中的`update_session_clean()`方法
- 确认`$_G['session']['newprompt']`参数是否被正确更新
7. **内存表状态检查**
- 登录MySQL执行:
- SHOW STATUS LIKE 'Handler_read_rnd_next';
- SHOW STATUS LIKE 'Created_tmp_disk_tables';
复制代码
- 若数值异常增高,说明需要优化`pre_common_notification`表的索引结构
8. **异步请求调试**
- 监控`home.php?mod=space&do=notice&view=system`接口响应
- 正常响应应包含JSON结构:
- {
- "new": 1,
- "data": [{
- "id": "123",
- "type": "system",
- "authorid": "1",
- "note": "测试通知"
- }]
- }
复制代码
9. **内存缓存验证**
- 在`config/config_global.php`中临时启用:
- $_config['memory']['prefix'] = 'discuz_';
- $_config['memory']['eaccelerator'] = 1;
复制代码
- 观察内存缓存是否正常存储通知数据
10. **移动端适配检测**
- 检查`template/default/mobile/common/header.htm`中是否包含:
- <div id="mnotice" class="mnotice" onclick="location.href='home.php?mod=space&do=notice'"></div>
复制代码
建议按照以下顺序执行排查:
1. 临时切换默认模板
2. 清空`data/cache`目录缓存
3. 后台执行"工具→更新统计→重建用户通知"
4. 检查`uc_server/data/cache`权限是否为755
5. 在`source/class/discuz/discuz_application.php`中开启debug模式观察请求流程
若需进一步分析,请提供:
1. F12网络面板中`notice?format=json`请求的完整响应头
2. 用户所在用户组的权限导出文件
3. `data/log/`目录下当日日志文件内容(注意脱敏)
通过上述专业排查流程,可准确定位到通知接收异常的具体环节。多数情况下问题集中在模板兼容性、用户组权限继承或内存缓存机制异常三个方面。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |