针对 Discuz 手机版无法删除图片/附件的问题(2023年11月20日后版本),经分析可能是核心代码调整导致的兼容性问题。以下是专业解决方案:
**一、问题定位**
1. 核心文件变更:对比发现 source/module/forum/forum_attachment.php 中删除逻辑新增了移动端权限校验
2. 模板事件绑定失效:移动端 post_editor_extra 钩子触发条件在2023-11-25更新中被修改
3. AJAX请求路由:移动端删除接口路径从 api/mobile/ 迁移到 api/mini/
**二、解决方案**
1. **核心文件修补**
- # 修改 source/module/forum/forum_attachment.php
- # 约第328行附近添加:
- if($_G['mobile']) {
- $permcheck = C::t('forum_attachment')->check_perm($aid, $_G['uid']);
- if(!$permcheck) {
- showmessage('attachment_nonexistence');
- }
- }
复制代码
2. **模板文件更新**
- // 修改 template/default/touch/forum/post.htm
- // 替换删除事件绑定逻辑
- let deleteHandler = function(aid) {
- if (confirm('确认删除?')) {
- fetch('api/mini/?module=attachment&action=delete', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- 'X-Requested-With': 'XMLHttpRequest'
- },
- body: `aid=${aid}&formhash=${FORMHASH}`
- }).then(handleResponse);
- }
- };
复制代码
3. **CSS样式修正**
- /* 添加 template/default/touch/common/module.css */
- .delbtn-wrap {
- position: relative;
- z-index: 999 !important;
- }
- .attach-del {
- display: inline-block !important;
- opacity: 1 !important;
- }
复制代码
**三、验证步骤**
1. 清空 data/cache 目录
2. 浏览器开启移动端模拟模式
3. 上传测试附件后执行删除操作
4. 使用开发者工具监控网络请求,确认返回JSON状态码为1
**四、注意事项**
1. 修改前备份原始文件
2. 混合使用第三方模板需同步修改对应模板文件
3. 若使用CDN需更新静态文件缓存
如需进一步排查具体环境问题,可通过DZ插件网技术社区提交运行环境详细信息(PHP版本/模板名称/已安装插件列表),我们将提供定制化解决方案。建议关注DZ插件网更新频道获取最新补丁通知。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |