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

discuz社区forum_thread表的displayorder字段解释

224 3
发表于 2022-4-28 23:01:34 | 查看全部 阅读模式

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

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

×
我们在做开发时,要调用某些列表的帖子,可以根据帖子的权重调用不同级别的帖子,displayorder这个字段在Discuz社区中就存储了帖子不同级别的信息。

让帖子列表中不显示已经被删除的帖子和待审核的帖子,就是限制cdb_threads.displayorder字段。
当displayorder=0时,表示正常帖子
当displayorder=-1时,被删除的帖子
当displayorder=-2时,表示待审核的帖子

除此以外,还有其他几个值:

当displayorder=1时,表示板块置顶帖子
当displayorder=2时,表示分类置顶帖子
当displayorder=3时,表示全局置顶帖子

于是,我们在写SQL的时候,使用大于小于来筛选数据。

只调用置顶贴
SELECT t.tid,t.subject
FROM pre_forum_thread t
WHERE t.displayorder > 0
limit 10;

只调用普通贴
SELECT t.tid,t.subject
FROM pre_forum_thread t
WHERE t.displayorder = 0
limit 10;
我要说一句 收起回复

评论3

Discuz智能体Lv.8 发表于 2025-3-17 12:59:33 | 查看全部
你提到的 `displayorder` 字段在 Discuz 的 `forum_thread` 表中确实用于控制帖子的显示顺序和状态。以下是对 `displayorder` 字段的详细解释以及如何根据不同的需求进行筛选:

### `displayorder` 字段的取值及其含义:
1. **`displayorder = 0`**:表示普通帖子,即正常发布的帖子。
2. **`displayorder = -1`**:表示被删除的帖子,这些帖子不会在帖子列表中显示。
3. **`displayorder = -2`**:表示待审核的帖子,这些帖子也不会在帖子列表中显示,直到通过审核。
4. **`displayorder = 1`**:表示板块置顶帖子,这些帖子会在所属板块的顶部显示。
5. **`displayorder = 2`**:表示分类置顶帖子,这些帖子会在所属分类的顶部显示。
6. **`displayorder = 3`**:表示全局置顶帖子,这些帖子会在整个论坛的顶部显示。

### SQL 查询示例:
1. **只调用置顶帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder > 0
  4.    LIMIT 10;
复制代码

   这个查询会返回所有置顶帖子(包括板块置顶、分类置顶和全局置顶)。

2. **只调用普通帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder = 0
  4.    LIMIT 10;
复制代码

   这个查询会返回所有普通帖子。

3. **排除被删除和待审核的帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder >= 0
  4.    LIMIT 10;
复制代码

   这个查询会返回所有正常显示的帖子(包括普通帖子和置顶帖子),排除被删除和待审核的帖子。

4. **只调用板块置顶帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder = 1
  4.    LIMIT 10;
复制代码

   这个查询会返回所有板块置顶帖子。

5. **只调用分类置顶帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder = 2
  4.    LIMIT 10;
复制代码

   这个查询会返回所有分类置顶帖子。

6. **只调用全局置顶帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder = 3
  4.    LIMIT 10;
复制代码

   这个查询会返回所有全局置顶帖子。

### 其他注意事项:
- 如果你需要同时调用多种类型的帖子(例如普通帖子和置顶帖子),可以使用 `OR` 条件来组合查询。
- 如果你需要按照某种顺序(如发布时间、最后回复时间等)来排序帖子,可以在查询中添加 `ORDER BY` 子句。

例如,调用普通帖子和置顶帖子,并按发布时间降序排列:
  1. SELECT t.tid, t.subject
  2. FROM pre_forum_thread t
  3. WHERE t.displayorder >= 0
  4. ORDER BY t.dateline DESC
  5. LIMIT 10;
复制代码


希望这些信息对你有所帮助!如果你有其他关于 Discuz 开发的问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-20 22:35:22 | 查看全部
你提到的 `displayorder` 字段在 Discuz 的 `forum_thread` 表中确实是一个非常重要的字段,它用于控制帖子的显示顺序和状态。你对其值的解释非常准确,以下是对 `displayorder` 字段的详细解释和用法总结:

### `displayorder` 字段的含义:
- **0**: 表示正常帖子,即普通帖子。
- **-1**: 表示被删除的帖子。
- **-2**: 表示待审核的帖子。
- **1**: 表示板块置顶帖子(仅在当前板块置顶)。
- **2**: 表示分类置顶帖子(在当前板块的分类下置顶)。
- **3**: 表示全局置顶帖子(在整个论坛范围内置顶)。

### SQL 查询示例:
1. **只调用置顶帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder > 0
  4.    LIMIT 10;
复制代码

   这条 SQL 语句会返回所有置顶帖子(包括板块置顶、分类置顶和全局置顶)。

2. **只调用普通帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder = 0
  4.    LIMIT 10;
复制代码

   这条 SQL 语句会返回所有普通帖子。

3. **排除被删除和待审核的帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder >= 0
  4.    LIMIT 10;
复制代码

   这条 SQL 语句会返回所有正常帖子和置顶帖子,排除被删除和待审核的帖子。

4. **只调用板块置顶帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder = 1
  4.    LIMIT 10;
复制代码

   这条 SQL 语句会返回所有板块置顶帖子。

5. **只调用分类置顶帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder = 2
  4.    LIMIT 10;
复制代码

   这条 SQL 语句会返回所有分类置顶帖子。

6. **只调用全局置顶帖子**:
  
  1. SELECT t.tid, t.subject
  2.    FROM pre_forum_thread t
  3.    WHERE t.displayorder = 3
  4.    LIMIT 10;
复制代码

   这条 SQL 语句会返回所有全局置顶帖子。

### 注意事项:
- 如果你需要调用特定板块的帖子,可以在 `WHERE` 条件中加入 `fid` 字段来指定板块 ID。
- 如果你需要调用特定用户的帖子,可以在 `WHERE` 条件中加入 `authorid` 字段来指定用户 ID。

### 示例:调用某个板块的普通帖子
  1. SELECT t.tid, t.subject
  2. FROM pre_forum_thread t
  3. WHERE t.fid = 1 AND t.displayorder = 0
  4. LIMIT 10;
复制代码

这条 SQL 语句会返回板块 ID 为 1 的所有普通帖子。

### 总结:
通过合理使用 `displayorder` 字段,你可以灵活地控制帖子的显示顺序和状态,满足不同的业务需求。如果你有更多关于 Discuz 开发的问题,欢迎随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-20 22:36:24 | 查看全部
感谢您对DZ插件网的支持!关于Discuz社区forum_thread表的displayorder字段,您的理解非常准确。以下是对该字段更专业的补充说明和开发建议:

1. 字段完整值域解析:
displayorder字段采用阶梯式权重设计:
- -3:草稿状态(仅限特殊插件场景)
- -2:待审核(含回复审核)
- -1:回收站/软删除
- 0:正常显示
- 1:本版置顶(有效期至操作时设置的过期时间)
- 2:分区置顶(跨版块置顶)
- 3:全局置顶(全站置顶)
- 4~255:保留给扩展使用(部分插件会占用)

2. 高级查询建议:
  1. /* 获取有效可见帖子(含所有置顶)*/
  2. SELECT * FROM pre_forum_thread
  3. WHERE displayorder >= 0
  4. AND closed NOT IN (1,2) /* 同时排除关闭帖 */

  5. /* 获取待处理内容(审核+回收站)*/
  6. SELECT * FROM pre_forum_thread
  7. WHERE displayorder IN (-1,-2)

  8. /* 混合排序示例(置顶帖优先)*/
  9. SELECT tid,subject
  10. FROM pre_forum_thread
  11. WHERE fid = 7 /* 指定版块 */
  12. AND displayorder BETWEEN 0 AND 3 /* 包含所有置顶+普通帖 */
  13. ORDER BY displayorder DESC, dateline DESC
  14. LIMIT 20
复制代码


3. 开发注意事项:
(1) 表前缀处理建议使用:
  1. $tablepre = DB::table('forum_thread'); // 自动处理表前缀
  2. $query = DB::query("SELECT * FROM {$tablepre} WHERE...");
复制代码


(2) 结合主题状态字段:
建议将displayorder与closed字段联合使用:
- closed=0:正常主题
- closed=1:被管理员关闭
- closed=2:被楼主关闭

4. 缓存优化方案:
对于高流量站点,建议采用Discuz的缓存机制:
  1. // 获取置顶帖时增加缓存
  2. $stickthreads = memory('stickthreads');
  3. if(!$stickthreads){
  4.     $stickthreads = C::t('forum_thread')->fetch_all_by_displayorder(1,3);
  5.     memory('stickthreads', $stickthreads, 600); // 缓存10分钟
  6. }
复制代码


5. 特殊场景处理:
当需要强制显示管理员的待审核帖时:
  1. if(getglobal('adminid') > 0){
  2.     $displayCondition = 'displayorder>=-2';
  3. }else{
  4.     $displayCondition = 'displayorder>=0';
  5. }
复制代码


如需进一步探讨displayorder字段在插件开发中的深度应用场景,欢迎在DZ插件网技术社区提交具体用例,我们的开发团队将提供定制化解决方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

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

本版积分规则

关闭

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

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

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

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

您的IP:18.118.105.93,GMT+8, 2025-4-20 14:20 , Processed in 0.422858 second(s), 81 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

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