首页 > CMS > Discuz > 正文

Discuz论坛教程之Discuz中如何修改最高在线人数

2024-08-30 19:07:30
字体:
来源:转载
供稿:网友

Discuz论坛教程之Discuz中最高在线人数更新和存储机制详解以及如何修改最高在线人数。

查看模板文件

/template/default/forum/discuz.htm

显示历史最高在线人数的代码为:

[php]view plaincopy

{lang index_mostonlines} <strong>$onlineinfo[0]</strong> {lang on} <strong>$onlineinfo[1]</strong>.</span>  

即 最高记录是 xx 于 YYYY-MM-DD

这里在线记录信息存储于数组$onlineinfo

那么数组$onlineinfo怎么来的呢,来看看论坛首页的业务逻辑文件:

/source/module/forum/forum_index.php

看看如下代码

[php]view plaincopy

$onlineinfo= explode("/t", $_G['cache']['onlinerecord']);  

if(empty($_G['cookie']['onlineusernum'])) {  

$onlinenum= C::app()->session->count();  

if($onlinenum> $onlineinfo[0]) {  

$onlinerecord= "$onlinenum/t".TIMESTAMP;  

C::t('common_setting')->update('onlinerecord', $onlinerecord);  

savecache('onlinerecord', $onlinerecord);  

$onlineinfo= array($onlinenum, TIMESTAMP);  

}  

dsetcookie('onlineusernum', intval($onlinenum), 300);  

} else{  

$onlinenum= intval($_G['cookie']['onlineusernum']);  

}  

$onlineinfo[1] = dgmdate($onlineinfo[1], 'd');  

这里首先从缓存$_G['cache']['onlinerecord']中读取数据复制给数组$onlineinfo;

然后判断当前在线人数是否超过历史最高,如果超过了则更新,注意看代码:

[php]view plaincopy

C::t('common_setting')->update('onlinerecord', $onlinerecord);  

由此我们看到历史最高数据存储在数据表pre_common_setting中skey='onlinerecord'

这里顺便说一下缓存数据$_G['cache']['onlinerecord']存储于数据表pre_common_syscache中cname='onlinerecord'

关于缓存的读取参考/source/function/function_core.php中的savecache和loadcache函数,这里就不再详述了;

总结一下

1、历史最高在线人数存储于数据表pre_common_setting中skey='onlinerecord';

2、discuz系统每次更新的时候会自动更新缓存$_G['cache']['onlinerecord'];

3、显示的时候直接从缓存中读取数据;

因此懂得mysql操作的朋友只需要修改数据表pre_common_setting中skey='onlinerecord'的svalue值然后在后台强制更新缓存即可达到修改历史最高在线人数的目的;

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表