带着这些疑问,我了解了下X系列版本的最高记录写入和调用方法:
1、首先从界面入手,审查元素找到对应的DIV的ID 和CLASS,
2、通过DIV找到模板文件是"/template/default/forum/discuz.htm"相关代码196-212行是:
- {lang onlinemember}
- - $onlinenum {lang onlines}
- - $membercount {lang index_members}($invisiblecount {lang index_invisibles}),
- $guestcount {lang index_guests}
- - {lang index_mostonlines} $onlineinfo[0] {lang on} $onlineinfo[1].
- {lang onlinemember}
- - {lang total} $onlinenum {lang onlines}
- - {lang index_mostonlines} $onlineinfo[0] {lang on} $onlineinfo[1].
/source/module/forum/forum_index.php这个文件,发现$onlineinfo就是在这里定义的,摘出157-170行并分析如下:
- $onlineinfo = explode("/t", $_G['cache']['onlinerecord']);
- //读取缓存中的最高记录和时间并写在数组$onlineinfo 中
- if(empty($_G['cookie']['onlineusernum'])) {
- //判断在线用户数量的cookie是否为空,如果为空就运行下面的程序
- $onlinenum = DB::result_first("SELECT count(*) FROM ".DB::table('common_session'));
- //搜出session表此时的在线记录数量
- if($onlinenum > $onlineinfo[0]) {
- //如果此时在线记录数量高于 最高纪录
- $onlinerecord = "$onlinenum/t".TIMESTAMP;
- //定义字符串$onlinerecord 为最高纪录加此时的时间
- DB::query("UPDATE ".DB::table('common_setting')." SET svalue='$onlinerecord' WHERE skey='onlinerecord'");
- //更新数据库表最高纪录的svalue值
- save_syscache('onlinerecord', $onlinerecord);
- //保存缓存数据到'onlinerecord'中
- $onlineinfo = array($onlinenum, TIMESTAMP);
- //重新定义数组$onlineinfo
- }
- dsetcookie('onlineusernum', intval($onlinenum), 300);
- //重新设置cookie的'onlineusernum'值
- } else {
- $onlinenum = intval($_G['cookie']['onlineusernum']);
- //如果在线用户数量的cookie存在,就读取cookie值
- }
- $onlineinfo[1] = dgmdate($onlineinfo[1], 'd');
- //格式化最高纪录时的时间格式是“2011-9-28”
难点就在$_G['cache']['onlinerecord'])从何而来,变量追溯cache的值要读pre_common_syscache 这个表,缓存数据data`是 mediumblob 这个数据类型,只能在程序里面修改,不能sql语句的方法修改,所以得用插件或者单独写个程序页面来清零,也就是用到上面13行的代码save_syscache('onlinerecord', $onlinerecord);来更新缓存的数值。
4、分析到这里修改方法就有了,定义一下变量$onlinerecord ,更新一下数据库表'common_setting'再保存一下缓存就好了:
$onlinerecord = "$onlinenum/t".TIMESTAMP;
DB::query("UPDATE ".DB::table('common_setting')." SET svalue='$onlinerecord' WHERE skey='onlinerecord'");
save_syscache('onlinerecord', $onlinerecord);
重设需要两个值,一个是是最高记录值,一个是最高纪录的时间,就做了个简单的页面方便大家修改