Discuz提示“帖子不存在”
在Discuz中提示帖子不存在有多种可能的情况,今天遇到一种,整理如下:
现象:
1. 帖子列表显示该帖子
2. 点击帖子提示“帖子不存在”
3. forum_thread displayorder为0
4. forum_post invisible为-1
5. forum_threadmod 有限时置顶、删除操作
结论:在删除帖子前执行过限时置顶操作,限时置顶到期后,计划任务(cron_threadexpiry_hourly.php)会自动重置 displayorder字段为 0 ,导致帖子出现在列表中,但是点击提示“帖子不存在”
解决方案:最直接的是更新mysql该行记录displayorder为-1 ,因为此贴本身应该是删除状态(如果有memcache缓存,为了实时生效,需要后台内存管理里更新相应tid fid缓存)。但是最佳优化方案还是要避免次类问题发生,后面抽时间补上方案。
相关资料:
Discuz pre_forum_thread displayorder字段
Discuz pre_forum_threadmod action字段
Discuz pre_forum_post invisible字段
Discuz! X2.5 的 forum_thread 和 forum_post 表的各标记位字段对应的值的说明
Discuz pre_forum_thread displayorder字段
- displayorder : 0 正常
- displayorder : -1 回收站
- displayorder : -2 待审核
- displayorder : -4 草稿帖
Discuz pre_forum_post invisible字段
- invisible :0 正常
- invisible :-3 已忽略
- invisible :-2 待审核
- invisible :-5 回收站
- invisible : -1 主题帖在回收站中
Discuz pre_forum_threadmod action字段
pre_forum_threadmod action字段定义了主题帖相关的操作,可以在这个文件中找到中文描述,source/language/forum/lang_modaction.php。
这里直接贴出来,方便直接查看
$lang = array ( 'EDT' => '编辑', 'DEL' => '删除', 'DLP' => '删除回复', 'DCM' => '删除点评', 'PRN' => '批量删帖', 'UDL' => '反删除', 'DIG' => '加入精华', 'UDG' => '解除精华', 'EDI' => '限时精华', 'UED' => '解除限时精华', 'CLS' => '关闭', 'OPN' => '打开', 'ECL' => '限时关闭', 'UEC' => '解除限时关闭', 'EOP' => '限时打开', 'UEO' => '解除限时打开', 'STK' => '置顶', 'UST' => '解除置顶', 'EST' => '限时置顶', 'UES' => '解除限时置顶', 'SPL' => '分割', 'MRG' => '合并', 'HLT' => '设置高亮', 'UHL' => '解除高亮', 'EHL' => '限时高亮', 'UEH' => '解除限时高亮', 'BMP' => '提升', 'DWN' => '下沉', 'MOV' => '移动', 'CPY' => '复制', 'TYP' => '分类', 'RFD' => '强制退款', 'MOD' => '审核通过', 'ABL' => '加入文集', 'RBL' => '移除文集', 'PTS' => '推送主题', 'RFS' => '解除推送', 'RMR' => '取消悬赏', 'BNP' => '屏蔽帖子', 'UBN' => '解除屏蔽', 'REC' => '推荐', 'URE' => '解除推荐', 'WRN' => '警告', 'UWN' => '解除警告', 'SPA' => '添加图章', 'SPD' => '撤销图章', 'SLA' => '添加图标', 'SLD' => '撤销图标', 'REG' => '群组推荐', 'PTA' => '生成文章', 'MAG' => '道具', 'REB' => '推送', 'LIV' => '直播', 'LIC' => '取消直播', );