新建文件kp_block_list_rand.lib.php
写入以下代码:
kv->get('rand_list_'.$cache_key); if($life&&$list_arr){ returnarray('list'=>$list_arr); } $table_arr=&$run->_cfg['table_arr']; $table=isset($table_arr[$mid])?$table_arr[$mid]:'article'; $table_prefix=$_ENV['_config']['db']['master']['tablepre']; $table_full=$table_prefix.'cms_'.$table; $run->cms_content->table='cms_'.$table; $total=$run->cms_content->count(); if($total>$limit*5){//最低5倍,如果太少,可能陷入死循环,导致网站崩溃 $keys=array(); $i=0; while($i<$limit){ $sql="SELECTidFROM{$table_full}WHEREid>=((SELECTMAX(id)FROM{$table_full})-(SELECTMIN(id)FROM{$table_full}))*RAND()+(SELECTMIN(id)FROM{$table_full})LIMIT1"; $arr=$run->db->fetch_first($sql); if($arr&&!in_array($arr['id'],$keys)){ $keys[]=$arr['id']; $i++; } } //读取内容列表 $list_arr=$run->cms_content->mget($keys); }else{ $keys=array(); $list_arr=$run->cms_content->find_fetch(array(),array('id'=>-1),0,$limit); shuffle($list_arr); $list_arr=array_slice($list_arr,0,$limit); } if($showcate){ $allcategorys=$run->category->get_category_db(); }else{ $allcategorys=array(); } if($showviews){ $run->cms_content_views->table='cms_'.$table.'_views'; if(empty($keys)){ foreach($list_arras$v){ $keys[]=$v['id']; } } $views_list_arr=$run->cms_content_views->mget($keys); $views_key='cms_'.$table.'_views-id-'; }else{ $views_key=''; $views_list_arr=array(); } foreach($list_arras&$v){ $run->cms_content->format($v,$mid,$dateformat,$titlenum,$intronum,$field_format); if($showcate&&$allcategorys){ $cate=$allcategorys[$v['cid']]; $v['cate_name']=$cate['name']; $v['cate_url']=$run->category->category_url($cate['cid'],$cate['alias']); } if($showviews&&$views_list_arr){ $v['views']=isset($views_list_arr[$views_key.$v['id']])?$views_list_arr[$views_key.$v['id']]['views']:0; } //hookkp_block_list_rand_foreach.php } if($life){ $run->kv->set('rand_list_'.$cache_key,$list_arr,$life); } //hookkp_block_list_rand_after.php returnarray('list'=>$list_arr); }
参数说明
1、mid 模型ID,默认为2 文章
2、dateformat 时间显示格式,如果该值为 human_date,则显示友好的时间格式,显示多久之前。
3、titlenum 标题截取长度,调用 {$v[subject]}
4、intronum 摘要、简介显示长度
5、limit 读取多少条内容,默认为10
6、life 缓存时间(秒),默认不缓存
7、showcate 是否读取内容分类信息,默认不读取,调用{$v[cate_name]},{$v[cate_url]}
8、showviews 是否读取内容浏览量信息,默认不读取,调用 {$v[views]}
实例代码:
{block:list_randmid="2"limit="8"life="600"} {loop:$data[list]$v}