影子论坛

搜索
夜间模式◐

Discuz在DIY中给帖子排序方式加入“随机”选项
[php] · admin · 发布于 · 2020-06-27 · 481 次点击 · 复制地址

管理员   admin  · 2020-06-27 15:05:26 · 显示全部楼层 · 阅读
c98862e3016769f2013ff3070274ab51.jpg
改好之后在diy中调用帖子列表的时候可以选择随机。
之前是想通过简单的方式来实现,例如随机生成帖子ID ,
通过王正url取值展示,这太麻烦了,于是你就看到了论坛顶部的?
这个方式是每隔一段时间(自己设定的数据缓存时间),即使没有新帖子,这个diy模块所调用的帖子也会变。
方式:加个选项,然后查询数据的时候把这个选项作为一个条件,选它就按它来调用。
具体操作:
1.打开/source/class/block/forum/block_threadhot.php,找到
  1. array('recommends', 'threadlist_orderby_recommends'),
复制代码
在这行代码下增加了
  1. array('rands', '随机'),
复制代码

2.打开/source/class/block/forum/block_thread.php,找到
  1. $orderby = isset($parameter['orderby']) ? (in_array($parameter['orderby'],array('lastpost','dateline','replies','views','heats','recommends')) ? $parameter['orderby'] : 'lastpost') : 'lastpost';
  2. $lastposter = !empty($parameter['lastposter']) ? $parameter['lastposter'] : '';
复制代码
修改为
  1. $orderby = isset($parameter['orderby']) ? (in_array($parameter['orderby'],array('lastpost','dateline','replies','views','heats','recommends','<span style="background-color: red;">rands</span>')) ? $parameter['orderby'] : 'lastpost') : 'lastpost';
  2. $lastposter = !empty($parameter['lastposter']) ? $parameter['lastposter'] : '';
复制代码
红色部分是添加的,其他地方不要动。  红色部分对应第一步里面添加的内容,你可以自定义。

3.继续在/source/class/block/forum/block_thread.php中找到下面代码
  1. $query = DB::query("SELECT DISTINCT t.*$sqlfield
  2. FROM `".DB::table('forum_thread')."` t
  3. $sqlfrom WHERE {$maxwhere}t.readperm='0'
  4. $sql
  5. AND t.displayorder>='0'
  6. ORDER BY t.$orderby DESC
  7. LIMIT $startrow,$items;"
  8. );
复制代码
修改为

  1. <font color="#ff0000">if($orderby=='rands'){
  2. $query = DB::query("SELECT DISTINCT t.* $sqlfield FROM `".DB::table('forum_thread')."` t $sqlfrom WHERE {$maxwhere}t.readperm='0' $sql AND t.displayorder>='0' ORDER BY rand() LIMIT $startrow,$items;");
  3. }else{</font>
  4. $query = DB::query("SELECT DISTINCT t.*$sqlfield
  5. FROM `".DB::table('forum_thread')."` t
  6. $sqlfrom WHERE {$maxwhere}t.readperm='0'
  7. $sql
  8. AND t.displayorder>='0'
  9. ORDER BY t.$orderby DESC
  10. LIMIT $startrow,$items;"
  11. );
  12. }
复制代码
红色部分为添加的判断。

就是在数据查询的外层加上了判断,如果是随机排序,查询里排序条件就用ORDER BY rand(),否则按原本的排序条件。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表