Piwik学习,


本文目的

最近为了给自己的web系统添加一个运营数据分析和展示的功能,本打算自己纯手工打造,但是发现成本太高,时间和精力方面不允许。在网上查阅了一些资料,发现目前有许多开源的web数据分析系统,所以拿来主意,决定找一个合适的开源web分析工具。最终选择了piwik,理由如下:

经过了一段时间的摸索,我终于将开发插件的流程梳理清楚了,记录于此,作为备忘。目前使用的Piwik是1.9.2版本(当前最新版本),这点很重要。Piwik的部分接口不向前兼容,以至于很多基于早期版本开发的插件在当前版本无法使用(吐槽:Piwik官方网站上提供的第三方插件几乎都不能在1.9.2上正常运行)。本文的主要内容如下:

  • Piwik工作原理
  • 安装部署Piwik
  • 安装Piwik插件
  • Piwik插件结构
  • Hello World,你懂的!
  • Piwik模版
  • Piwik图形视图
  • 待了解的地方 ……

 

Piwik工作原理

Piwik是一个web系统,主要用于web运营分析。它会部署在你自己的apache和mysql中,这样运营数据都在你自己的服务器里!安装好Piwik后,它会提供一段js代码,你只需要将这些代码嵌入到你web中的每个网页中(如果你的系统是用模版开发的,具有相同的footer模版,那么这里最适合放入这段代码),那么每当这些网页被访问时,这些数据就会传回给Piwik服务器。这里会有个问题,由于数据收集代码放在html中,那么异步请求无法被统计到,因为这些请求不会返回完整的页面,而是部分页面或数据。不要紧,piwik提供web日志分析的功能(具体配置见这里),这样就可以统计出所有的访问数据。

 

安装部署Piwik

安装Piwik的确很简单:下载开发包,解压到apahce服务器web根目录,配置piwik。Piwik在第一次访问时,提供了一个非常简介的安装向导,指导你一步一步的配置好piwik,具体步骤见这里。

 

安装Piwik插件

插件的安装也很简单,只需要将插件拷贝到piwik_src/plugins目录下面,然后去piwik配置页面启用插件。具体步骤,参见这里。

 

Piwik插件结构

Piwik源代码目录下的plugins目录中是Piwik官方插件,其实官方插件是最好的学习参考。要创建你自己的第一个插件,首先需要给插件取一个响亮的名称,这里就姑且称之为“BourneliPlugin”吧!然后创建目录piwik_src/plugins/BourneliPlugin。接下来,需要在此目录下,创建两个比较重要的文件:

  • BourneliPlugin.php:定义插件的基本信息、插件的位置
  • Controller.php:插件的CGI方法,可以理解为Web MVC模式中的Controller,Piwik框架会将插件相关的Url映射到Controller.php中的方法。

 

Hello World,你懂的!

按照上面的目录结构,你的第一个插件的基本骨架就搭建成功了,现在我们来写点什么,实现我们的第一个“Hello World”吧。先看看BourneliPlugin.php代码,如下:

<?php
class Piwik_BourneliPlugin extends Piwik_Plugin {
    /**
     * 插件描述信息。
     */
    public function getInformation(){
        return array(
            'description' => '这时bourneli的插件',
            'homepage' => 'http://qfs.sng.local/',
            'author' => 'bourneli',
            'author_homepage' => 'http://cnblogs.com/bourneli/',
            'license' => 'GPL v3 or later',
            'license_homepage' => 'http://www.gnu.org/licenses/gpl.html',
            'version' => '0.1',
            'translationAvailable' => false,
        );
    }

    // 加载插件
    function postLoad(){
        Piwik_AddWidget('Bourneli Test', 'hello world', 'BourneliPlugin', 'helloWorld');
    }
}

上面的代码主要定义的插件的基本信息和插件挂接的位置,需要注意一下几点:

接下来看看Controller.php中的代码:

<?php
class Piwik_BourneliPlugin_Controller extends Piwik_Controller{
    function helloWorld(){
        echo 'This is hello from Bourneli<br/>';
		echo 'This is hello from Bourneli<br/>';
		echo 'This is hello from Bourneli<br/>';
		echo 'This is hello from Bourneli<br/>';
    }
}

对,你没有看错,Controller.php中的代码就是这么简单!需要注意一下几点

OK,写完了代码,现在可以将BourneliPlugin整个目录拷贝到piwik_src/plugins目录下,看看效果了。

首先,进入插件管理页面,如下图:

This is a string '{$myString}' from template.<br> <h1>今天的天气真实糟透了!</h1>

(写这篇文章的时候天气真的很糟!)

然后在Controller.php中添加下面的代码(前面例子中出现的代码备省略了):

<?php
class Piwik_BourneliPlugin_Controller extends Piwik_Controller{
    ……	
    function templateDemo(){
        $view = Piwik_View::factory('myTpl');
        $view->myString = 'okkkkkkkkkkkkkk';
        echo $view->render();
    }
}

添加的函数是一个新的插件函数,用于模版调用,可以看到第一行使用Piwik的视图工厂,加载一个视图对象,并将此对象与模版绑定。然后直接将字符串“okkkkkkkkkkkkkk”赋值给模版中的变量myString,最后渲染并输出。

还没完,虽然写了这个函数,但是没有将其挂接到Piwik的widget面板中(即时不挂接面板,也可以访问,有兴趣的读者可以通过抓包看看如何访问),在BourneliPlugin.php中添加下面的代码:

<?php
class Piwik_BourneliPlugin extends Piwik_Plugin {
	... 
    // 加载插件
    function postLoad(){
        ... 
		Piwik_AddWidget('Bourneli Test', 'template demo', 'BourneliPlugin', 'templateDemo');
    }
}

为了突出重点,前面相同的代码已经省略。我们来看看效果,如下:

原创作品,允许转载,转载时请以超链接方式标明出处,谢谢合作。

相关内容

    暂无相关文章