新建文件kp_block_list_rand.lib.php
写入以下代码:
<?php defined('KONG_PATH') || exit; /** * 内容随机列表模块 * @param int mid 模型ID * @param string dateformat 时间格式 * @param int titlenum 标题长度 * @param int intronum 简介长度 * @param int limit 显示几条 * @param int life 缓存时间 * @param int showcate 是否读取分类信息 * @param int showviews 是否读取内容浏览量信息 * @param int field_format 是否格式化主表自定义字段内容(主要是单选框、多选框、下拉框) * @return array */ function kp_block_list_rand($conf) { global $run; // hook kp_block_list_rand_before.php $mid = _int($conf, 'mid', 2); $dateformat = empty($conf['dateformat']) ? 'Y-m-d H:i' : $conf['dateformat']; $titlenum = _int($conf, 'titlenum'); $intronum = _int($conf, 'intronum'); $limit = _int($conf, 'limit', 10); $life = _int($conf, 'life', 0); $showcate = _int($conf, 'showcate', 0); $showviews = _int($conf, 'showviews', 0); $field_format = _int($conf, 'field_format', 0); if( isset($conf['life']) ) unset($conf['life']); $cache_key = implode('_', $conf); //缓存的key,这样子不同的参数调用数据不一样 $cache_key = str_replace('-', '_', $cache_key); //要把 - 转换成 _ , 要不然存入数据表时报错, kongphp框架用 - 分隔参数 $list_arr = $run->kv->get('rand_list_'.$cache_key); if($life && $list_arr){ return array('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 = "SELECT id FROM {$table_full} WHERE id >= ((SELECT MAX(id) FROM {$table_full})-(SELECT MIN(id) FROM {$table_full})) * RAND() + (SELECT MIN(id) FROM {$table_full}) LIMIT 1"; $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_arr as $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_arr as &$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; } // hook kp_block_list_rand_foreach.php } if($life){ $run->kv->set('rand_list_'.$cache_key, $list_arr, $life); } // hook kp_block_list_rand_after.php return array('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_rand mid="2" limit="8" life="600"} {loop:$data[list] $v} <div class="posts-mini"> <div class="mr10"> <div class="item-thumbnail"> <a target="_blank" href="{$v[url]}"> <img src="{$v[pic]}" data-src="{$v[pic]}" alt="{$v[subject]}" class="fit-cover radius8 ls-is-cached lazyloaded"> </a> </div> </div> {/loop} {/block}
© 版权声明
本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。Mail To:718588255@qq.com
THE END