piwik custom variables  是一个功能非常强大的自定义变量跟踪方案,多用于基于访客或是页面级别的变量跟踪。piwik默认最多可以添加5个自定义变量。

使用方式是在客户端脚本里添加如下片断

_paq.push(['setCustomVariable',
// Index, the number from 1 to 5 where this custom variable name is stored
1,
// Name, the name of the variable, for example: Gender, VisitorType
"Gender",
// Value, for example: "Male", "Female" or "new", "engaged", "customer"
"Male",
// Scope of the custom variable, "visit" means the custom variable applies to the current visit
"visit"
]);

查看setCustomVariable源码如下

/**
* Set custom variable within this visit
*
* @param int index
* @param string name
* @param string value
* @param string scope Scope of Custom Variable:
* - "visit" will store the name/value in the visit and will persist it in the cookie for the duration of the visit,
* - "page" will store the name/value in the next page view tracked.
* - "event" will store the name/value in the next event tracked.
*/
setCustomVariable: function (index, name, value, scope) {
var toRecord; if (!isDefined(scope)) {
scope = 'visit';
}
if (!isDefined(name)) {
return;
}
if (!isDefined(value)) {
value = "";
}
if (index > 0) {
name = !isString(name) ? String(name) : name;
value = !isString(value) ? String(value) : value;
toRecord = [name.slice(0, customVariableMaximumLength), value.slice(0, customVariableMaximumLength)];
// numeric scope is there for GA compatibility
if (scope === 'visit' || scope === 2) {
loadCustomVariables();
customVariables[index] = toRecord;
} else if (scope === 'page' || scope === 3) {
customVariablesPage[index] = toRecord;
} else if (scope === 'event') { /* GA does not have 'event' scope but we do */
customVariablesEvent[index] = toRecord;
}
}
}

参数解释:

  1. index :表示使用5个自定义变量的中的第几个
  2. name:自定义变量名称
  3. value:自定义变量值
  4. scope:自定义变量的使用范围,包括:
  • visit(访客级别):同一个访客30分钟内在不同的页面都能操作该变量,可以做计算
  • page(页面级别):在当前页面只要页面没有重载就可以获得该变量,即通过别的js事件或是方法是可以获取到该变量的。
  • event(事件级别):在当前页面的只能在一个事件级别里获取该变量,下次事件操作将清空改变量,此时页面并无重载操作。

需要注意的是:如果同一个scope的情况下,相同的index值如果先后被设置了不同的name,value,那么后设置的将会覆盖前面的。但是如果scope范围不同的话则无影响。

如果三个scope同时都设置了值也是可以的,因为piwik在发送请求时visit级别才用到的是_cvar参数,page是用的是cvar,而event才用的是e_cvar,例如下面的例子

_paq.push(['setCustomVariable',1,"GenderX","MaleX","visit"]);
_paq.push(['setCustomVariable',1,"GenderY","MaleY","page"]);
_paq.push(['setCustomVariable',1,"GenderZ","MaleZ","event"]);
/*cvar={"1":["GenderXXX","MaleXXX"]}&_cvar={"1":["Gender","Male"]}*/
_paq.push(['trackPageView']);

请求发送的参数是

cvar={"1":["GenderY","MaleY"]}&e_cvar={"1":["GenderZ","MaleZ"]}&_cvar={"1":["GenderX","MaleX"]}

当然index是可以改变的,范围1-5,这里只是为了演示piwik针对相同index不同级别的scope是如何处理的而已。

删除一个自定义变量请使用下面的方法

_paq.push(['deleteCustomVariable', 1, "visit"]);

获取自定义变量

var customVariable = this.getCustomVariable( 1, "visit" );

如果自定义变量不存在会返回false

另外在使用visit级别的时候,如果要在跨页面或是页面刷新后能获取之前设置的变量,需要在

_paq.push(['trackPageView']);

前添加下面的代码

_paq.push(['storeCustomVariablesInCookie']);

这是因为visit跨页面访问自定义变量是通过存储cookie来是实现的,只有把变量存储到了cookie,在其他的页面或是刷新后才能通过getCustomVariable来获取那个设置的变量。

piwik custom variables的更多相关文章

  1. Animation Blueprint, Set Custom Variables Via C++

    https://wiki.unrealengine.com/Animation_Blueprint,_Set_Custom_Variables_Via_C%2B%2B Animation Bluepr ...

  2. 开源网站流量统计系统Piwik源码分析——参数统计(一)

    Piwik现已改名为Matomo,这是一套国外著名的开源网站统计系统,类似于百度统计.Google Analytics等系统.最大的区别就是可以看到其中的源码,这正合我意.因为我一直对统计的系统很好奇 ...

  3. [UE4] Adding a custom shading model

    转自:https://blog.felixkate.net/2016/05/22/adding-a-custom-shading-model-1/ This was written in Februa ...

  4. Code::Blocks项目配置基础

    File 菜单 New :新建( Empty file/file . class . project . build target ) . Recent projects/files :近期打开的项目 ...

  5. pycharm 修改新建文件时的头部模板(默认为__author__='...')

    pycharm 修改新建文件时的头部模板 默认为__author__='...'    [省略号是默认你的计算机名] 修改这个作者名的步骤: 依次点击:File->Settings->Ed ...

  6. vscode restclient 插件

    使用步骤: 1.vscode 安装restclient 扩展 2.创建  .http 或 .rest 文件 ,编写相应内容 同一个文件内 可以通过 ### 分割多个请求 可以通过 @hostname ...

  7. Mobile CI/CD 101

    This is a guest post by Slava Chernikoff, Principal Engineer at Binwell. Mobile DevOps falls under t ...

  8. CentOS下配置SS5(SOCKS5)代理服务器

    方案:使用开源的SS5( Socks Server 5 ) 官网:http://ss5.sourceforge.net/ (点击左侧的Software在右侧的Server处进入下载地址) CentOs ...

  9. [Java in NetBeans] Lesson 04. Class / Objects

    这个课程的参考视频和图片来自youtube. 主要学到的知识点有: Class: Blueprint for an object. (e.g. dog is a class) Object: cust ...

随机推荐

  1. vue安装流程

      一.环境搭建 vue推荐开发环境: Node.js: javascript运行环境(runtime),不同系统直接运行各种编程语言 npm: Nodejs下的包管理器.由于国内使用npm会很慢,这 ...

  2. bootstrap 4 移除Glyphicons

    /********************************************************************** * bootstrap 4 移除Glyphicons * ...

  3. Bagging-Adaboost-RF的粗糙理解

    三种方法都是组合方法,组合方法是使用多个分类器进行投票[构造每个分类器的样本都是通过有放回抽样得到的] 1.Bagging(装袋):k次抽样,训练k次,得到k个模型(分类器),等权重投票 2.Adab ...

  4. 简易计算器的java实现

    伪代码 public class MainTestwei { 定义两个数组,List<Double> number和 List<Character>calculation分别用 ...

  5. PS学习之餐饮行业修图

    素材 红烧肉 生菜 洋葱 目标效果 开始操作: 首先打开PS,将红烧肉素材放入  将红烧肉单另扣下来(用快随选择工具 按住Alt键是减选  抠图时  将画布放大 细细的扣) 然后创建一个和当前选区大小 ...

  6. 【HDOJ3567】【预处理bfs+映射+康拓展开hash】

    http://acm.hdu.edu.cn/showproblem.php?pid=3567 Eight II Time Limit: 4000/2000 MS (Java/Others)    Me ...

  7. 安装,配置,启动FTP,SSH,NFS服务

    1.安装,配置,启动FTP服务 sudo apt-get install vsftpd 修改vsftpd的配置文件/etx/vsftpd/.config,将下面几行前面的“#”去掉 #local_en ...

  8. 《DSP using MATLAB》Problem 6.20

    先放子函数: function [C, B, A, rM] = dir2fs_r(h, r); % DIRECT-form to Frequency Sampling form conversion ...

  9. log4net 自定义日志级别记录多个日志

    程序中原来只记录一个日志,现在我要写一个用户操作日志,需要与原来的日志分开,在config文件中一阵折腾无果(要么写不全,要么写重了,反正没办法完美分离,要么与现存代码没办法完美兼容),差点放弃准备自 ...

  10. wget命令的使用

    wget是在命令行下载文件的命令 -c 断点续传,用于大文件的下载或者网络不稳定的情况下,一般不写也可以 -P 指定下载到那个目录(是大写的P) 举例 [root@bogon local]# wget ...