首页 经验方法内容详情

twcms模板标签之随机内容列表 kp_block_list_rand

2023-01-19 巨蚂蚁目录

新建文件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}






{/loop} {/block}