为了提高论坛帖子展示的多样性和动态性,我们可以对现有系统进行改造,使其支持随机排序功能。具体来说,就是每隔一段时间(用户可自行设定的数据缓存时间),即使没有新帖子,这个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'] : '';
这里主要是增加了'rands'选项。
3. 最后一步,找到以下SQL查询语句:
$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 t.$orderby DESC LIMIT $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.*$sqlfield FROM `".DB::table('forum_thread')."` t $sqlfrom WHERE {$maxwhere}t.readperm='0' $sql AND t.displayorder>='0' ORDER BY t.$orderby DESC LIMIT $startrow,$items;");
}
上述更改在外层添加了判断逻辑。如果是随机排序,查询中的排序条件会使用ORDER BY rand();否则,将继续沿用原来的排序规则。
通过以上步骤,您可以轻松地为论坛模块添加随机排序功能,从而增强网站的互动性和吸引力。
希望这篇具有SEO优化的文章能够帮助您更好地理解和实现论坛帖子的随机排序功能。