现在的位置: 首页 > 软件开发 > 正文

Firestats的Javascript/JS加载模式

2012年04月12日 软件开发 ⁄ 共 3158字 暂无评论 ⁄ 被围观 0+

WordPress在使用WP Super Cache等静态化插件时,需要对文章计数类(如WP-PostViews)、访问统计类(如Firestats)的插件进行改造,这些插件默认是采用Wordpress的插件挂钩接口加载,需要PHP动态脚本的支持,但静态化以后,页面不再运行PHP脚本,Wordpress挂钩接口就不再起作用,此时这些插件就需要改造为Javascript/JS加载模式才能正常工作。以下主要讲解Firestats的Javascript加载改造。(Firestats目前的版本: 1.6.7 stable。)

Firestats的配置文件

对,没错,Firestats除了后台的控制页面可以设置各种选项,它还拥有配置文件!默认安装插件之后,在插件第一层目录下存在 sample-conf.php这个文件,文件中有配置项及设置说明,其中的设置示例全部为注释状态,根据你的需要修改这些配置,然后将文件更名或复制为 conf.php,保存到同目录下。我的设置如下:

<?php
define('FS_DEFAULT_LANG','zh_CN');//Firestats的语言设置
define('JS_HIT', true);//关键设置,要用Javascript加载方式需要改为true
define('FS_COMMIT_STRATEGY',FS_COMMIT_AUTOMATIC);//访问处理模式,FS_COMMIT_AUTOMATIC=3,为缓存后处理,不实时计入数据库,这样对访问量比较大的网站不会造成负担,无论是否Javascript加载模式都简易采用此模式。也可以将此项设置为FS_COMMIT_BY_OPTION或4,这样就可以在后台设置中修改此项配置而无需修改配置文件。
define('FS_COMMIT_MAX_CHUNK_SIZE',5);
define('FS_AUTOMATIC_COMMIT_INTERVAL_SECONDS',600);//缓存后的访问记录提交到数据库的时间间隔,时间设置越长,数据库负担越低
define('FS_AUTOMATIC_COMMIT_WHEN_USER_ACCESS_STATISTICS',false);
define('DISABLE_MUTEX',false);
define('FS_LOGGING', true);
define('DEFAULT_SHOW_FIRESTATS_FOOTER',false);
define('MYSQL_NEW_LINK',true);//此处建议设置为true,这样可以保障firestats使用独立的账号访问数据库firestats相关的数据表,避免安全隐患
?>

Firestats的源码修改

Firestats的代码,在Javascript加载方面属于新推出的功能,存在一些Bug,其中一项就是出现Javascript代码死循环加载,导致无法按照需要进行计数。这个Bug需要修改插件的php/db-hit.php文件来修正,大约在17行,修改其中的function fs_add_hit($close_connection = true, $site_id = 1)的函数定义。

修改前的代码:

function fs_add_hit($close_connection = true, $site_id = 1)
{
	if (JS_HIT)
	{//JS_HIT为true时加载js/fs.js.php,fs.js.php的内容是加载php/hit.php文件,
	 //而php/hit.php内容又回到本函数调用,这样会进入死循环,导致调用无效
		$link = fs_url("js/fs.js.php?site_id=$site_id");
		echo "<script type='text/javascript' src='$link'></script>\n";
	}
	else
	{...

修改后的代码:

function fs_add_hit($close_connection = true, $site_id = 1)
{
	if (false&&JS_HIT)
	{//设置条件为假,强制跳过循环调用,将访问记录计入数据库
		$link = fs_url("js/fs.js.php?site_id=$site_id");
		echo "<script type='text/javascript' src='$link'></script>\n";
	}
	else
	{...

Firestats的Javascript加载方法

加载方法很简单,在主题的header.php的标签内或footer.php的前写入如下代码:

<script type="text/javascript" src="http://www.opensoce.com/wp-content/plugins/firestats/js/fs.js.php?site_id=1"></script>

其中site_id的数值,要参照后台Firestats设置中站点管理中的站点ID,如下图:

Firestats的Javascript/JS加载模式-站点管理的站点ID

Firestats的Javascript/JS加载模式-站点管理的站点ID

建议将这段代码写入footer.php中,这样有利于提高网站访问速度。

Firestats改Javascript加载之后的另一个大Bug

Firestats改Javascript加载之后,还存在一个Bug,就是不会排除掉Wordpress博主自己的访问记录,这个同样可以修改代码来修正,本次先跳过,后续补上:P

补充排除Firestats设置中排除登陆用户访问记录的修改方法:

修改插件的php/db-hit.php文件来修正,大约在17行,修改其中的function fs_add_hit($close_connection = true, $site_id = 1)的函数定义。

function fs_add_hit($close_connection = true, $site_id = 1)
{
	if (false&&JS_HIT)
	{
		$link = fs_url("js/fs.js.php?site_id=$site_id");
		echo "<script type='text/javascript' src='$link'></script>\n";
	}
	else
	{
		global $user_ID;//添加代码开始
		get_currentuserinfo();
		$excluded_users = get_option('firestats_excluded_users');
		$excluded_user = $user_ID && $excluded_users && in_array($user_ID,explode(",",$excluded_users));
		if (!$excluded_user){//添加代码结束
			require_once(dirname(__FILE__).'/init.php');
			$res = fs_add_hit__($site_id);
			if ($close_connection)
			{
				$fsdb = &fs_get_db_conn();
				$fsdb->disconnect();
				fs_get_db_conn(false,true); // clear connection object.
			}

			if ($res !== true)
			{
				echo "FireStats error : $res";
			}
		}//闭合花括号
	}
}

给我留言

您必须 [ 登录 ] 才能发表留言!

×
#