admin 发表于 2021-3-10 08:36:54

Discuz DIY 加入随机调用修改方法!

简单的说,就是每隔一段时间(自己设定的数据缓存时间),即使没有新帖子,这个diy模块所调用的帖子也会变。


具体操作:

1.打开/source/class/block/forum/block_threadhot.php,找到
array('recommends', 'threadlist_orderby_recommends'),

之下增加

array('rands', '随机'),

2.打开/source/class/block/forum/block_thread.php,找到

$orderby = isset($parameter['orderby']) ? (in_array($parameter['orderby'],array('lastpost','dateline','replies','views','heats','recommends')) ? $parameter['orderby'] : 'lastpost') : 'lastpost';$lastposter = !empty($parameter['lastposter']) ? $parameter['lastposter'] : '';

改为

$orderby = isset($parameter['orderby']) ? (in_array($parameter['orderby'],array('lastpost','dateline','replies','views','heats','recommends','rands')) ? $parameter['orderby'] : 'lastpost') : 'lastpost';$lastposter = !empty($parameter['lastposter']) ? $parameter['lastposter'] : '';

3.找到

$query = DB::query("SELECT DISTINCT t.*$sqlfieldFROM `".DB::table('forum_thread')."` t$sqlfrom WHERE {$maxwhere}t.readperm='0'$sqlAND t.displayorder>='0'ORDER BY t.$orderby DESCLIMIT $startrow,$items;");

改为

if($orderby=='rands'){$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;");}else{$query = DB::query("SELECT DISTINCT t.*$sqlfieldFROM `".DB::table('forum_thread')."` t$sqlfrom WHERE {$maxwhere}t.readperm='0'$sqlAND t.displayorder>='0'ORDER BY t.$orderby DESCLIMIT $startrow,$items;");}

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

拾光 发表于 2021-3-10 08:37:52

如果您的网站是gbk的,修改前请务必将block_thread.php文件编码格式转成gbk的,否则前台会乱码。

IT618发布 发表于 2021-3-10 08:38:16

block_thread.php文件内容没有中文字,不用转码。

block_threadhot.php,网站是gbk的,才要将编码格式转成gbk的。

浅生 发表于 2021-3-10 08:38:21

对的,你这个教程只改了 block_threadhot.php(热门帖)中的 orderby,DIY不选热门帖不就不起作用了么?
一点补充:一般DIY最后都有改动就变成了“高级自定义”使用的:block_thread.php,所以orderby的修改应该在这个文件里面。
页: [1]
查看完整版本: Discuz DIY 加入随机调用修改方法!

创宇盾启航版免费网站防御网站加速服务