TWCMS使用及开发手册2024.04.23

block:list_rand

本标签文档以最新的TWCMS_v2.03 20140505和2023魔改版本(修复了一些问题,可直接覆盖到原始程序里)为测试基础。

由于本功能不是twcms程序自带的,所以,需要新建文件kp_block_list_rand.lib.php(放到twcms/block目录里)

写入以下代码:

 HTML Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?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);
}

kp_block_list_rand.lib.php参数说明

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实例代码(放入到模板文件里)

 HTML Code 
1
2
3
4
5
6
7
8
9
10
11
12
{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}




猜您喜欢:

Copyright © 2012-2024TWCMS使用及开发手册 Inc. 保留所有权利。Powered by TWCMS 2.0.3

页面耗时0.0312秒, 内存占用233.13 KB, 访问数据库22次, PHP版本php8.0.3nts, 已关闭缓存

合作伙伴:爱云源码 twcms模板 老郭博客CMS 今日上线通王CMS模板 网页版PbootCMS开发助手 郑州泰鼎展柜 TWCMS随机标签插件 郑州展柜厂 大城县岩棉管怎么样及主要特点 TWCMS模板「高端响应式百度色资讯新闻类主题」 TWCMS模板「高端响应式类日主题」 TWCMS模板「简洁纯净新闻博客资讯主题模板」  响应式手游下载类网站模板 twcms支持php7.1.9替换文件 郑州空调上门维修 TWCMS模板「简洁大气新闻主题模板」 爱云CMS教程网 {block:list和{block:global_cate调用文章分类栏目名和url 雄鹰工具箱 郑州公墓价格 郑州展柜设计 郑州泰鼎展柜 郑州展柜生产厂家 珠宝展柜 河南郑州电脑上门维修 郑州led拼接屏维修 LECMS使用及开发手册 LECMS模板「响应式IT热点资讯类网站(自适应手机端)」  郑州网站SEO哪家公司好 郑州网站优化推广 twcms模板教程 twcms随机主题 冠县护栏板 lecms无人值守系统使用教程