本来这个功能是自己为了跟踪搜索引擎对自己网站的更新速度而做地,所以就没打算做成插件而是直接在Joomla! 的原代码的基础上做地。今天看到有网友留言咨询,所以就写一点文字,把这个功能给总结一下。
Joomla!对网站来访的所有来宾是统一放在一个名字为session的表里的,所以,要跟踪当前的在线情况,都是从这个表里直接读取数据就可以完成。那么,要想做到这些,我只需要截取到Joomla!中对此表的插入操作即可。对此表的插入操作其实也就是Joomla!的session的初始化操作啦。
在1.5.3版本中,Joomla! 将大部分表的操作都做成了类的方式,这些类可以在 /libraries/joomla/database/table 处找到。针对于session表,它的类文件是session.php。好了,现在打开这个文件。
第一步,直奔文件尾,在最后一个}前加上以下代码{pre xml:lang="php"}function getbot(){
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
if (strpos($useragent, 'google') !== false){
return 'Google';
}
if (strpos($useragent, 'msnbot') !== false){
return 'MSN';
}
if (strpos($useragent, 'slurp') !== false){
return '雅虎';
}
if (strpos($useragent, 'baiduspider') !== false){
return '百度';
}
if (strpos($useragent, 'sohu-search') !== false){
return '搜狐';
}
if (strpos($useragent, 'sogou web spider') !== false){
return '搜狗网';
}
if (strpos($useragent, 'lycos') !== false){
return 'Lycos';
}
if (strpos($useragent, 'robozilla') !== false){
return 'Robozilla';
}
if (strpos($useragent, 'sosospider') !== false){
return '腾讯搜搜';
}
return false;
} {/pre}这个函数是根据来访的客户端的UserAgent来获取一些常见的搜索引擎的名字地,当然,这个也不全,您可以根据相关搜索引擎的文档来补充完整。
做完这一步后,我们再返回文件首部,搜索{pre xml:lang="php"}function insert($sessionId, $clientId){/pre}找到以后,在该函数代码里加下如下部分:{pre xml:lang="php"} if(!$this->usertype){
$this->usertype=$this->getbot();
}{/pre}如果您不清楚要加在什么就方,就从刚才找到的位置往下再找{prexml:lang="php"}$this->client_id = $clientId;{/pre}加到这一行的下面。(请注意,因为添加的代码里含有汉字,在修改、保存session.php时,一定要注意将该文件的编码保存得和您的网站的编码一致)
好了,现在我们已经能让系统来记录下搜索引擎了。下来要做的就是让Joomla!把这些内容显示出来。很容易。我们直接打开modules/mod_whosonline/helper.php,打开后,搜索:{pre xml:lang="php"} // if guest increase guest count by 1
if ($session->guest == 1 && !$session->usertype) {
$guest_array ++;
}{/pre}找到以后,在下面添加上如下代码:{pre xml:lang="php"} // search spider
if ($session->guest == 1 && $session->usertype) {
$bot_array ++;
$bot_list[$session->usertype]++;
}{/pre}然后搜索{pre xml:lang="php"} return $result;{/pre}找到以后,在其上面一行添加{pre xml:lang="php"} $result['bot'] = $bot_array;
$result['botlist'] = $bot_list;{/pre}差不多快大功告成了,下在要做的就是把这两个数组给显示出来。打开文件modules/mod_whosonline/tmpl/default.php,搜索:{pre xml:lang="php"}if(($showmode > 0) && count($names)) : ?>{/pre}找到后,直接在其上面添加:{pre xml:lang="php"}if($count['bot']>0):
echo "<br /><strong>正在造访的搜索引擎</strong>:".$count['bot'];
echo "<br /><ul>";
foreach($count[botlist] as $k=>$v):
echo "<li><strong>$k</strong>:$v</li>";
endforeach;
echo "</ul>";
endif;{/pre}
同样,这里也用到了汉字,如果你也需要这样做的话,保存该文件时一样要注意您所彩的编码!
评论