代码拉取完成,页面将自动刷新
946
修复特殊情况下回帖倒序排列的顺序名称错乱问题
已合并
描述此 Pull Request 的变更
已知某些特殊情况下(例如:帖子多次审核、词语过滤审核和楼主编辑主帖同时触发等)会产生奇怪的数据错误,具体原因仍在探索中。在这样的大前提下,当帖子设置中勾选了 “回帖倒序排列” 后,会导致楼层顺序名称(例如:沙发、板凳、地板)显示错误,且楼主变成了 # 符号。
模拟复现方法:在数据库表 forum_threaddisablepos 新建一条 tid 数据,即手工标记数据错误。然后编辑这个 tid 对应帖子,勾选 “回帖倒序排列” 后问题即可再现。
描述变更理由
if(!$post['hotrecommended']) {
if($_G['forum_pagebydesc']) {
if($ordertype != 1) {
$post['number'] = $_G['forum_numpost'] + $_G['forum_ppp2']--;
} else {
$post['number'] = $post['first'] == 1 ? 1 : ($_G['forum_numpost'] - 1) - $_G['forum_ppp2']--;
}
} else {
if($ordertype != 1) {
$post['number'] = ++$_G['forum_numpost'];
} else {
$post['number'] = $post['first'] == 1 ? 1 : --$_G['forum_numpost'];
$post['number'] = $post['number'] - 1;
}
}
}
正常情况下,这段代码是不会生效的,因为会被下面几行后的:
if($maxposition) {
$post['number'] = $post['position'];
}
这个判断覆盖掉,只有当 $maxposition = false 时,即第 385 行开始的判断检测到楼层数据错误时,会不使用 position 查询。可能就是因为平常不会触发到这一段代码,所以楼层名称错误长期未被发现。实际测试,只需要将:$post['number'] = $post['number'] - 1;
这部分删除,楼层名称和楼主名称都正常显示了。最后,默认的正序排列,不管帖子数据是否错误,楼层名称均正常。