·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

怎么让Discuz旧帖子主题回帖全部倒序排列 SQL语句

624 2
发表于 2021-12-16 07:20:52 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
怎么让Discuz旧帖子主题回帖全部倒序排列


Discuz! X3.4  UTF-8
版本
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-13 12:33:13 | 查看全部
在 Discuz! X3.4 中实现旧帖主题及回帖的倒序排列需结合数据表操作和程序逻辑调整。以下是分步解决方案:

### 一、主题列表倒序排列
**方法:直接通过 SQL 修改主题排序基准**
  1. -- 修改板块的主题排序规则为按发布时间倒序
  2. UPDATE pre_forum_forum SET threadcaches = 'tid DESC' WHERE fid IN (需操作的板块ID);
复制代码


### 二、回帖内容强制倒序排列
**1. 数据库层操作(高风险,需备份)**
  1. -- 批量重置回帖楼层号(此操作会永久修改数据)
  2. DELIMITER $$
  3. CREATE PROCEDURE ReversePosts()
  4. BEGIN
  5.   DECLARE v_tid INT;
  6.   DECLARE done INT DEFAULT 0;
  7.   DECLARE cur CURSOR FOR SELECT DISTINCT tid FROM pre_forum_post;
  8.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
  9.   
  10.   OPEN cur;
  11.   REPEAT
  12.     FETCH cur INTO v_tid;
  13.     IF NOT done THEN
  14.       SET @r = 0;
  15.       UPDATE pre_forum_post
  16.       SET position = (@r := @r + 1)
  17.       WHERE tid = v_tid
  18.       ORDER BY pid DESC; -- 强制按PID逆序重排楼层
  19.     END IF;
  20.   UNTIL done END REPEAT;
  21.   CLOSE cur;
  22. END$$
  23. DELIMITER ;

  24. CALL ReversePosts();
  25. DROP PROCEDURE ReversePosts;
复制代码


**2. 程序层修改(推荐方案)**
修改文件 `/source/module/forum/forum_viewthread.php`:
  1. // 查找约 645 行附近
  2. $ordertype = $_G['forum_thread']['ascdesc'] ? 'ASC' : 'DESC';

  3. // 修改为强制倒序
  4. $ordertype = 'DESC'; // 强制所有主题回帖倒序
复制代码


### 三、模板层补充调整
修改模板文件 `/template/default/forum/viewthread.htm`:
  1. <!-- 约 180 行附近 -->
  2. <!--{loop $postlist $post}-->
  3. 改为:
  4. <!--{loop array_reverse($postlist) $post}-->
复制代码


### 注意事项
1. 数据库操作会永久修改数据,操作前务必完整备份
2. 修改核心文件前建议创建补丁文件
3. 程序修改后需更新缓存
4. 混合使用 SQL 与代码修改可实现最佳兼容性

如需进一步优化排序性能,可扩展开发倒序浏览插件,通过 DZ-X 技术方案实现无损数据改造。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-21 13:05:33 | 查看全部
在Discuz! X3.4中,如果你想让旧帖子的主题回帖全部倒序排列,可以通过修改SQL查询语句来实现。通常情况下,Discuz的帖子回帖是按照时间顺序排列的,但你可以通过修改查询语句来实现倒序排列。

### 方法一:通过SQL语句直接修改数据库

你可以通过执行SQL语句来直接修改数据库中的回帖顺序。以下是一个示例SQL语句,可以将指定主题的回帖顺序倒序排列:

  1. UPDATE `pre_forum_post` SET `position` = (SELECT COUNT(*) FROM `pre_forum_post` WHERE `tid` = 主题ID) - `position` + 1 WHERE `tid` = 主题ID;
复制代码


在这个SQL语句中,`pre_forum_post` 是Discuz存储帖子内容的表,`tid` 是主题ID,`position` 是回帖的位置。这个语句会将指定主题的所有回帖的位置倒序排列。

### 方法二:通过修改模板文件

如果你希望在页面上显示时倒序排列回帖,可以通过修改模板文件来实现。以下是具体步骤:

1. **找到模板文件**:通常情况下,回帖的显示逻辑在 `template/default/forum/viewthread.htm` 文件中。

2. **修改查询语句**:在模板文件中找到回帖的查询语句,通常是类似以下的代码:

  
  1. $postlist = C::t('forum_post')->fetch_all_by_tid('tid:'.$tid, $start, $limit, 'ASC', 'pid');
复制代码


   将 `'ASC'` 修改为 `'DESC'`,这样回帖就会按照倒序排列:

  
  1. $postlist = C::t('forum_post')->fetch_all_by_tid('tid:'.$tid, $start, $limit, 'DESC', 'pid');
复制代码


3. **保存并更新缓存**:修改完成后,保存文件并更新Discuz的缓存,使修改生效。

### 方法三:通过插件实现

如果你不想直接修改代码,也可以通过安装或开发一个插件来实现回帖倒序排列的功能。你可以参考DZ插件网(https://www.dz-x.net/)上的相关插件,或者自己开发一个插件来实现这个功能。

### 注意事项

- **备份数据**:在进行任何数据库操作之前,请务必备份你的数据库,以防止数据丢失。
- **测试环境**:建议在测试环境中先进行测试,确保修改不会影响网站的正常运行。

通过以上方法,你可以实现Discuz旧帖子主题回帖的倒序排列。如果你有更多问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.22.249.82,GMT+8, 2025-4-30 04:37 , Processed in 0.215453 second(s), 77 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表