欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Piwik 文档说明 有大用 有大大用

该文档根据piwik的官方文档进行的翻译,由于英文水平有限,所以如果出错的话,希望能告知,
有关插件开发的部分,本人根据示例已做过插件的开发,但有个问题还未解决,会尽快解决更新上来。
Email:zhang845742658@126.com   qq:845742658
 
所有标准统计报告:关键词和搜索引擎,网站页面url,页面标题,用户国家,供应商,操作系统,浏览器市场份额,屏幕分辨率,桌面和移动, 约束(每访问网站,页面上的时间,重复访问),关键活动,自定义变量,进入/退出页面,下载文件,和更多的,分为四个主要类别分析报告——游客行为,反向链接,目标/电子商务(30 +报告)。
看到Piwik之旅。
1. 实时数据更新。
2. 可定制仪表盘
3. 所有网站指示数据
4. 行进化
5. 电子商务分析
6. 目标转换跟踪
7. 事件跟踪
8. 设置搜索系统
9. 定位
10. 页面转换
11. 页面覆盖物
12. 页面速度和页面报告速度
13. 不同的页面交互跟踪
14. 广告跟踪
15. 搜索引擎跟踪
16. 电子邮件报告(pdf,html报告)
17. 注释
18. 没有数据限制 没有数据限制,你可以保存任何你想要保存的数据
 
相对优势和选择理由:
1. 实时的网站分析报告:在Piwik中,默认情况下,报告是实时产生的。对于高流量的网站,你能选择报告处理的频率.
2. 可以方便的根据网站的需求构建对应的插件
3. 可以自己掌握采集到的数据
4. 完全定制化的用户界面。
 
内容介绍
 
一. 电子商务
1. 收集产品详细信息
参数设置: setEcommerceView (’产品id’,’产品名称’,’产品分类’,价格);
2. 添加产品到订单:
参数设置:addEcommerceItem(’产品id’,’产品名称’,’产品分类’,价格,数量);
注1.如果购物车有多个产品可以用addEcommerceItem 添加多个。
2.产品分类如果为多级用[‘分类1’,‘分类2’,‘分类3’,…] 表示
          3.价格float,数量int,其余为字符串
参数设置trackEcommerceOrder(’订单编号’,’总价’,’价格(不含运输费)’,’税金’,’运输费’,’打折’)
注:1.如果没有折扣,用false
    2.订单编号字符串 其余为float
3. 订单的删除
参数设置trackEcommerceCartUpdate(价格)
4. Goals
在控制面板里设定指定的页面或者页面组,记录页面可以是”=”也可以是包含也可以是正则表达式
可以设定访问是否有效,是否记录重复的访问,经测试,即使开启1个页面接受多次转化也必须要离开该页面后,才可以进行重复记录
 
 
二. 跟踪代码

http://tj.xxxxx.com/index.php?module=CoreAdminHome&action=trackingCodeGenerator&date=yesterday&period=day&idSite=7Js跟踪代码

image.png



1.跟踪基本代码 放在所有需要统计的页面
<script type="text/javascript"> 
var _paq = _paq || []; 
(function(){ 
Var u=(("https:"==document.location.protocol)?"https://{$PIWIK_URL}/" : "http://{$PIWIK_URL}/"); _ paq.push(['setSiteId',{$IDSITE}]); 
_paq.push(['setTrackerUrl',u+'piwik.php']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
var  d=document, 
g=d.createElement('script'), 
s=d.getElementsByTagName('script')[0]; 
g.type='text/javascript'; 
g.defer=true;
g.async=true; 
g.src=u+'piwik.js'; 
s.parentNode.insertBefore(g,s); 
})();
</script>
<noscript><p><img src=http://{$PIWIK_URL}/piwik.php?idsite={$IDSITE}” style=”border:0;” alt=”” ></p></noscript>
 
注:1.<noscript></noscript> 必须添加,功能是为了防止用户禁止js后,不能进行统计
   2.{$PIWIK_URL}:你自己的piwik网站存放的地址
       3. {$IDSITE}:你设置的要进行统计的网站的id
2.setCustomVariable 设置自定义变量 deleteCustomVariable 清空自定义变量
 参数设置:setCustomVariable(索引,名称,值,类型)
     注:类型:vistor:存储在本地cookie中,以便持续访问进行记录 ,如果不选择,默认值是vistor
  在不清除cookie的时候,没刷新一次页面都会进行提交
   Page: 存储在接下来的页面追踪
   Event: 存储在接下来的时间追踪
在设置自定义变量的时候,如果你新定义的变量的索引已经被使用了,那么你新定义的变量将覆盖以前的变量
deleteCustomeVariable(“名称”,”类型”) 。 关于清空自定义变量我做过尝试 
3.trackEvent 事件统计
参数设置:trackEvent(‘类型’,’行为’,’名称’,’值’);
使用情况:点击后页面未能发生跳页
4. setDocumentTitle 设置页面标题
SetDocumentTitle(‘页面名称’);
5. trackSiteSearch 记录搜索关键词,url会自动的收集 
   trackSiteSearch(‘关键词’,‘分类’,‘搜索结果’);
 
2.http追踪代码
所有参数必须是url编码
1. 请求参数:idsite(必须)跟踪的网站的id
rec(必须) 正在进行的跟踪,必须设置。例子 &rec = 1; 
 url(必须) 当前行为访问的完整url
   推荐参数:action_name 跟踪的标题,可以用/设置1个或者多个分类
 _id 访问者唯一id,16位字符长度的哈希值
 rand 访问随机值,防止浏览器缓存
 apiv 定义api的版本 &apiv=1
   可选用参数:urlref 完整的活动方的url
   _cvar使用与自定义变量.json格式的数组
   _idvc 访问计数,用来统计访客数量
   _viewts 上一次访问的时间戳
   _idts 第一次访问的时间戳
   _rcn 活动名称
   _rck 活动关键词
    res 访客的屏幕分辨率
h,m,s 当前的时,分,秒
   ua 用户代理,用来检测用户的系统跟浏览器版本
   lang 检测访问者的国家?(感觉应该是语言)
可选的action:cvar 适用自定义变量
link 用户从外部打开网站的url,用于记录外部点击,建议设置为相同的值
    download 用户下载地址的url
    search 网站搜素关键词
search_cat 指定搜索,用于区分其他搜索
search_count 指定搜素是,建议设置。
Idgoal 如果指定,将会触发一次转化
revenue 货币值,配合idgoal
gt_ms 处理花费的时间,用于页面的平均访问时间
cs 页面编码
event track 事件追踪
e_c 事件分类
e_a 事件行为
e_n 事件名称
e_v 事件值
Ecommerce info 电子商务
在设置电子商务的时候,把设置idgoal=0
ec_id 电子商务订单唯一标识
revenue 订单总价
ec_st 订单总计(刨除运输费用)
ec_tx 税额
ec_sh 运输费用
ec_dt 折扣
ec_items 订单商品json格式的数组 包含sku, 名称,分类,价格,数量
特殊参数:
一下参数需要你设置token_auth或者拥有超级管理员权限的用户访问
token_auth
cip:访问者的ip
cdt:访问时间 格式:2011-04-05 00:11:42
cid:用户id
new_visit 如果设置为1,则被记录为新的用户
country 国家
region 地区
city 城市
lat 纬度
long 经度
Tracking Bots 跟踪机器人
默认未开启,如果你用http api 你会对跟踪机器人感兴趣。想开启跟踪机器人,设置url参数:&bots=1;

 
示例:app端匿名跟踪
http://piwik-server/piwik.php?_cvar={"1":["OS","iphone5.0"],"2":["PiwikMobileVersion","1.6.2"],"3":["Locale","en::en"],"4":["NumAccounts","2"]}&action_name=Viewsettings&url=http://mobileapp.piwik.org/window/settings&idsite=8876&rand=351459&h=18&m=13&s=3&rec=1&apiv=1&cookie...脳480&
Bulk Tracking 批量追踪
包含参数 requests 
 token_auth 
示例: { "requests": [
      "?idsite=1&url=http://example.org&action_name=Test bulk log Pageview&rec=1",
      "?idsite=1&url=http://example.net/test.htm&action_name=Another bul k page view&rec=1"],
      "token_auth": "33dc3f2536d3025974cccb4b4d2d98f4"}

三,活动跟踪
1. pk_campaign 活动跟踪
2. pk_kwd  如果一次活动有多个单独的推广方式,则设计pk_kwd
事例:如网站准备举行了一次推广,推广方式分为:图片,链接,那连接地址应该为
<a href=”{DOMATIN_URL}?pk_campaign={CAMPAGIN_CODE}&pk_kwd=IMGLINK”><img src=””></a>
<a href=”{DOMATIN_URL}?pk_campaign={CAMPAGIN_CODE}&pk_kwd=ALINK”>网站</a>
 
 
 
 
 
 
 
 
 
 
 
TrackEvent(事件统计),Goal(目标),Coustom Variable(自定义变量) 区别
 
产生情况:当点击不能发生页面跳转或者弹出新的页面的时候,trackEvent 便出现了
统计信息:goal 跟coustom variable 比tarckevent适合记录那些需要统计跳转率,转化率,费用等信息。
 
 
 
三.Piwik 安全
1.为了防止恶意攻击,可以这样写scrip标签:
<script>...</script>
2.为了获取为经过过滤的html代码。可以用 piwik:: unsanitizeInputValues
3.当你确定插入的内容不是html代码,请用$.text() 或者$.val() 
 举例: var ajaxData = getDataFromAjax();
$('#someLabel').text(ajaxData.labelToUse);
4.阻止 CSRF
CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
使用以下技术防止CSRF攻击:
1. 检查token_auth,确保token_auth 不会出现在页面缓存中,用post方法进行传递
2. 防止Mysql 注入
正确写法
use Piwik\Db;
$idSite = Common::getRequestVar('idSite');
$sql = "SELECT * FROM " . Common::prefixTable('site') . " WHERE idsite = ?";
$rows = Db::query($sql, array($idSite));
3. 防止远程文件包含
正确写法:
$clientToUse = Common::getRequestVar('seoClient');
if ($clientToUse == 'mySeoProvider') {
    $client = new Clients\MySeoProvider();
} else if ($clientToUse == 'myOtherSeoProvider') {
    $client = new Clients\MyOtherSeoProvider();
} else {
    throw new Exception("Invalid SEO provider client: $clientToUse!");
}
4. 防止直接访问
正确写法:
在页头加上defined('PIWIK_INCLUDE_PATH') or die('Restricted access');
 
 
 
5. 其他编码指南
1.代码不需要闭合标签
2.用php文件加载js代码 
原文Use the .php extension for all your PHP scripts.
3.避免使用这些函数eval, exec, passthru, system, popen or preg_replace
4.确保直接访问php文件不会执行任何代码,会对piwik的安装造成影响
5.确保你的php代码不会依赖register_globals 是否打开,因为在php5默认是关闭的
   6.如果你的插件只有超级管理员或者只在后台使用,那么请继承Piwik\Plugin\ControllerAdmin.
四。国际化,语言的国际化
五。测试
1.单元测试(PHPUnit Test)
2.集成测试(Integration Test)
3.视图测试(UI Test)
六。Piwik可视化报告数据
此指导可以帮助你知道:
1. 如何展示你想要显示的数据
2. 用不同的方式展示你的报告
3. 怎么样在仪表盘展示你的报告
4. 怎么创建一个新的可视化视图
需要基础:
1. 懂得php编码
2. 理解piwik的扩展功能
3. 理解piwik的Piwik controllers 和 Piwik Apis的用法跟目的
七.数据库
  piwik_log_visitr :访问记录主表
      piwik_log_link_visit_action :行动列表,记录每一次访问行为
piwik_log_action:操作类型表
piwik_log_conversion:转换表
piwik_log_conversion_item:电子商务表
piwik_archive 前缀表 归档数据表
piwik_site 设置要跟踪的网站信息
piwik_goal 目标列表。
piwik_user 用户表
piwik_user_dashboard
piwik_user_language 用户访问语言表
piwik_segment 自定义查询记录
piwik_option 
piwik_logger_message  piwik开发或者使用的日志
结尾部分有数据库的详细注释。
 
八. piwik 的插件开发 
我想开发一个登陆注册记录插件,以这个为例子.
1.创建插件
(1)通过console命令行创建
命令: console generate:plugin –name=”插件名称”; 
实现代码: console generate:plugin –name =”RegionPlugin”;
在你的piwik目录plugin文件夹下就可以找到你刚刚创建的插件了
目录结构如下:

API.php 类文件,包含数据库的读取。
Controller.php 插件控制类 ,控制html显示类。
RegistPlugin.php 插件的描述类。如功能,事件函数等。
Plugin.json 包含插件的元数据,如名称,描述,版本等
Readme.me 实用文档
Javascripts  存放js的文件夹
Screenshots
Templates 模板文件,文件名以twig结尾。
新增文件: menu.php 控制插件显示位置
   命令:console generate:menu –pluginname=”插件名称”
   代码:console generate:menu –pluginname=”RegistPlugin”
: lang文件夹 文件格式 语言.json文件 多语言包
(2).打开你的piwik网站。目录,管理->插件->插件管理,在插件列表里找到你刚刚添加的那个插件。启用该插件。你的插件就可以使用了。
 
访问地址 piwik地址+index.php?module=插件名称&action=index&idSite=1&date=today&period=day
就可以看到你创建的插件了。
piwik地址+index.php?module=RegistPlugin&action=index&idSite=1&date=today&period=day
2。以上步骤已经是你学会怎么创建一个简单的插件了,以下步骤会告诉你怎么让你的插件显示你想要的内容。
(1).Meun.php 
你的插件显示在那个位置是由这个文件来进行控制的
注:添加标题主要用到$menu 的add函数
   $menu->add(一级模块名称,二级模块名称,array(‘module’=>’’,’action’=>’’),是否显示,排序值,默认true); (最后一个值,似乎会影响到菜单栏的滑动效果,)
你的menu一共可以有4个函数,分别代表添加到4个位置 
函数1:configureReportingMenu 创建菜单项 继承自core/menu/ MenuReporting.php 的MenuReporting类
代码:$menu->add('一级模块名称', '二级模块名称', array('module' => 'ExampleUI', 'action' => 'dataTables'), true, 30);
如果你用上述代码的话,二级模块的url跟一级模块url是同一个url,且,如果你在此栏下要添加多个二级模块的话,无法设置此模块的排序位置。

如果你想添加多个二级模块模块,可以用以下的办法
$menu->add('一级模块名称', '二级模块名称', array('module' => 'ExampleUI', 'action' => 'dataTables'), true, 30);
上述代码,把二级模块绑定在一级模块下,且,所有设置均为对应2级模块的设置。
完整的代码:
public function configureReportingMenu(MenuReporting $menu)
    {
        $menu->add('用户注册分析', '', array('module' => 'ExampleUI', 'action' => 'dataTables'), true, 30);
 
        $this->addSubMenu($menu, '用户注册分析', 'wap用户注册', 'barGraph', 1);
        $this->addSubMenu($menu, '用户注册分析', 'pc端用户注册', 'pieGraph', 2);
 
        $menu->add('用户登陆分析', '', array('module' => 'ExampleUI', 'action' => 'dataTables'), true, 31);
 
        $this->addSubMenu($menu, '用户登陆分析', 'wap用户登陆', 'barGraph', 1);
        $this->addSubMenu($menu, '用户登陆分析', 'pc端用户登陆', 'pieGraph', 2);
    }
private function addSubMenu(MenuReporting $menu, $firstname, $subMenu, $action, $order)
    {
        $menu->add( $firstname, $subMenu, array('module' => 'ExampleUI', 'action' => $action), true, $order);
    }
效果图:
 
 
注:访客分析 => General_Visitors,
页面分析 => General_Actions
来源分析 => 未找到
电子商务目标=> 未找到
函数2:configureTopMenu 创建顶部菜单 继承自core/menu/ MenuTop.php 的MenuTop 类
如果你的报告页是一个新的页面的话,可以创建一个顶部菜单
示例代码:
public function configureTopMenu(MenuTop $menu)
    {
        $menu->add('运营', null, array('module' => 'RegistPlugin', 'action' => ''), true, $orderId = 30);
        $menu->add('产品', null, array('module' => 'RegistPlugin', 'action' => ''), true, $orderId = 31);
    }
效果图
 
函数3:configureUserMenu 添加用户下拉菜单 继承自 core/menu/ MenuTop.php 的 MenuTop类
代码:
public function configureUserMenu(MenuUser $menu)
    {
        $menu->add('CorePluginsAdmin_MenuPlatform', '配置', array('module' => 'ExampleUI', 'action' => 'notifications'), true, 3);
    }
效果图:
 
函数4:configureAdminMenu 添加管理菜单项 继承自 core/menu/ MenuAdmin.php 的 MenuAdmin 类
代码:
public function configureAdminMenu(MenuAdmin $menu)
    {
        $menu->add('General_Settings', '测试后台添加', array('module' => 'RegistPlugin', 'action' => ''), true, 30);
    }
效果图:
 
代码
$menu->add('测试新栏目', '测试后台添加', array('module' => 'RegistPlugin', 'action' => ''), true, 30);
效果图
 
(2) RegistPlugin.php 这个文件是记录你的插件的描述信息
(3) controller.php 
    Piwik 的mvc实现:
  代码
  Controller.php 文件:
  namespace Piwik\Plugins\RegistPlugin;
use Piwik\View;
  Class controller extends \Piwik\Plugin\Controller{
Public function index(){
$view = new View('@RegistPlugin/index.twig'); //实例化的时候传入模板路径,规定加上@符号
           $view->answerToLife = '42';
return $view->render();
}
  }
 Templates/index.twig 文件
    测试页面:{{ answerToLife }}
 
访问url: http://hosturl+/index.php?module=RegistPlugin&action=index&idSite=1&date=today&period=day
 
    效果图:
 
(4)api.php文件介绍
Api文件包内容获取的数据,你可以通过以下url方式访问
{hosturl}index.php?module=API&method={pluginname}.{apifunctionname}&idSite={$idsite}&date=today&period=month&token_auth=d828148b2b599f17c5f85dd64e4ca46c
示例:
http://localhost/piwik/index.php?module=API&method=RegistPlugin.getWapLoginInfo&idSite=1&date=today&period=month&token_auth=d828148b2b599f17c5f85dd64e4ca46c 
api代码
class api{
public function getPcRegistorInfo()
    {
        return "pcRegistor";
}
}
效果
 
(5)javascripts/plugin.js 页面的js文件
(6)setting 控制那些属性将要被显示。
(7)增加语言的国际化,piwik支持多语言
以下是帮助文档里添加一个浏览器浏览记录的代码和流程
添加一个新的报告:
1. 添加一个api方法
修改 api文件 添加方法
public function getLastVisitsByBrowser( $idSite, $period , $data ,$segment = false )
    {
        return array();
}
   实现live插件的代码
public function getLastVisitsByBrowser( $idSite, $period , $date ,$segment = false )
    {
        $data = \Piwik\Plugins\Live\API::getInstance()->getLastVisitsDetails(
            $idSite,
            $period,
            $date,
            $segment,
            $numLastVisitorsToFetch = 100,
            $minTimestamp = false,
            $flat = false,
            $doNotFetchActions = true
        );
        //$data->applyQueuedFilters(); //添加插件配置的地方
$result = $data->getEmptyClone($keepFilters = false); // we could create a new instance by using new DataTable(),
                                                          // but that wouldn't copy DataTable metadata, which can be
                                                          // useful.
 
        foreach ($data->getRows() as $visitRow) {
            $browserName = $visitRow->getColumn('browserName');
 
            // try and get the row in the result DataTable for the browser used in this visit
            $resultRowForBrowser = $result->getRowFromLabel($browserName);
 
            // if there is no row for this browser, create it
            if ($resultRowForBrowser === false) {
                $result->addRowFromSimpleArray(array(
                    'label' => $browserName,
                    'nb_visits' => 1
                ));
            } else { // if there is a row, increment the visit count
                $resultRowForBrowser->setColumn('nb_visits', $resultRowForBrowser->getColumn('nb_visits') + 1);
            }
        }
        //print_R($result);exit;
        return $result;
}
Controller文件修改后
public function index()
    {
        $view = new View('@NewTestPlugin/index.twig');
        $view->getLastVisitsByBrowserReport = $this->getLastVisitsByBrowser();
    echo $view->render();
        //$view->answerToLife = '42';
 
        //return $view->render();
    }
 
    public function getLastVisitsByBrowser()
{
    // ViewDataTable instances are created by the ViewDataTable Factory, not through the new operator
    $view = \Piwik\ViewDataTable\Factory::build(
        $defaultVisualization = 'table',
        $apiAction = 'NewTestPlugin.getLastVisitsByBrowser'
    );
    // after a ViewDataTable instance is created, it must be configured so the display is perfect
    // for the report. this is done by setting properties of the ViewDataTable::$config object.
 
    // here, we disable the 'Show All Columns' footer icon and the 'Show Goals' footer icons since
    // our report doesn't have that data. we also make sure the 'label' column has the 'Browser' title,
    // so users will know what is shown in that column.
 
    $view->config->show_table_all_columns = false;
    $view->config->show_goals = false;
    $view->config->translations['label'] = '浏览器';
 
    return $view->render();
}
访问地址:http://localhost/piwik/index.php?module=API&method=NewTestPlugin.getLastVisitsByBrowser&idSite=1&dat...

插件的可配置型和国际化。在你创建的api中,你看到的结构是没有具体数值的,都是0,1的xml文件,现在我们开始配置并让0,1,变成我们需要的文字。
1. 在你创建的插件的目录下创建Settings.php.
2. 添加如下代码到该文件
namespace Piwik\Plugins\你定义的插件名称;
use Piwik\Settings\SystemSetting;
class Settings extends \Piwik\Plugin\Settings
{
public $realtimeReportDimension;
    protected function init()
    {
     $this->realtimeReportDimension= $this->createRealtimeReportDimensionSetting();
     $this->addSetting($this->realtimeReportDimension);
    }
    private function createRealtimeReportDimensionSetting()
    {
     $setting = new \Piwik\Settings\UserSetting('reportDimension', 'Report Dimension');
    $setting->type = self::TYPE_STRING;
    $setting->uiControlType = self::CONTROL_SINGLE_SELECT;
    $setting->description   = 'Choose the dimension to aggregate by';
    $setting->availableValues = NewTestPlugin::$availableDimensionsForAggregation;
    $setting->defaultValue = 'browserName';
    return $setting;
    }
}
注.Piwik会自动检测该文件
3.修改api文件
添加 
$data->applyQueuedFilters();
        $settings = new Settings('NewTestPlugin');
        $columnName = $settings->realtimeReportDimension->getValue();
4.在NewTestPlugin.php 文件下加入
public static $availableDimensionsForAggregation = array(
        'browserName' => 'Browser',
        'visitIp' => 'IP',
        'visitorId' => 'Visitor ID',
        'searches' => 'Number of Site Searches',
        'events' => 'Number of Events',
        'actions' => 'Number of Actions',
        'visitDurationPretty' => 'Visit Duration',
        'country' => 'Country',
        'region' => 'Region',
        'city' => 'City',
        'operatingSystem' => 'Operating System',
        'screenType' => 'Screen Type',
        'resolution' => 'Resolution'
 
        // we could add more, but let's not waste time.
);
Piwik的语言国际化。
1. 在你的插件里新建lang文件夹,创建en.json(英文包)
2. 添加内容
{
"插件名称": {
        "唯一标识": "翻译结果"
    }
}
3. 调用方法
{{ '唯一标识'|translate }}
 
 
当你用url访问你想要访问的api的时候,一下会给你提供帮助
url拼接+参数+值
{你设置的piwik站点}?module= {你所访问的api的名称}.(你所访问的api的方法)&
isSite={站点id}&date=(时间[todayyesterday,或者是xxxx-xx-xx])& period={周去[day,week,month,year]}&format={你所展示的形式[XML, JSON, CSV, PHP (serialized PHP), HTML (simple html)]}& filter_limit={条数}
 
注:1.时间区间的另一种写法 period=range&date=xxxx-xx-xx , yesterday
2. 附件是piwik添加注释的数据表,。
 
 
 
浏览器识别种类添加
修改文件 修改文件1。Piwik/vendor/piwik/device-detector/parser/client/browser.php
变量$availableBrowsers 添加 浏览器简称=>浏览器全称
变量$browserFamilies添加 浏览器全称=>浏览器简称
2。Piwik/vendor/piwik/device-detector/parser/regexes/client/browsers.php
添加正则匹配规则
regex: 'BIDUBrowser(?:/(\d+[\.\d]+))?'
name: 'Bidu Browser'
version: '$1'
3.清除piwik\tmp\cache\tracker 里的缓存文件    
 
 
自定义变量的添加
查看自定义变量的数量命令: console customvariables:info 
修改自定义变量的数量:  console customvariables:set-max-custom-variables 数量
 
自定义活动追踪名称: 文档地址http://piwik.org/faq/how-to/faq_120/#faq_120
 
 
计算某一个活动的次日留存
条件 来源名称包含 活动标识
 和 访客类型 是 returning
 和 距离上次访问的天数 至少 1
 和 距离上次访问的天数 至多 2
 
 
 
 
计算某一个活动的第二日新用户
条件 来源名称包含 活动标识
 和 访客类型 是 new

来自  http://www.mhaowen.com/test/testbb/aaa.html

普通分类: