多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
>原文地址:https://developer.piwik.org/guides/how-piwik-works 翻译工具:Chrome自带,有些不通常的地方,人工修改了一下,英语太菜,见谅 #### 介绍 Piwik是一个应用程序,主要有两件事情: - 收集和存储分析数据 - 提供存储数据的报告 为了实现这一结果,派维克的几个部分发挥作用: - Piwik的JavaScript的跟踪器,包含在网页中 - 跟踪器收集包含在其中的网页上的数据,并通过调用HTTP跟踪API将其发送给Piwik - 该归档任务运行和前处理数据(无论是在飞行中或通过定期任务) - 数据在报告中公开,可通过Web界面或HTTP报告API访问 #### 插件架构 Piwik的代码库包括: - Piwik Core,它提供了应用程序的基础以及扩展点 - 插件,使用扩展点添加行为和内容到应用程序 插件不仅仅针对要定制Piwik的第三方开发人员:Piwik的大部分都是通过插件实现的。派维克核心意图尽可能的小。 因此,有两种插件: - 默认插件提供Piwik的基本功能:它们包含在存储库和发行版中 - 可以手动安装可选插件(通过将其复制到plugins/文件夹中)或通过Web界面中的Piwik的MarketPlace进行安装 - 代码库 以下是构成Piwik代码库的主要文件和文件夹: ```shell config/ core/ # Piwik Core类 lang/ # 翻译 plugins/ # 插件类及其资产 tests/ vendor/ # 由Composer安装的库 console # CLI界面的入口点 index.php # Web应用程序和HTTP报告API的入口点 piwik.php # HTTP跟踪API的入口点 piwik.js # JavaScript跟踪器,需要在网站中包含piwik.js ``` Piwik使用Composer将其依赖项(PHP库)安装到vendor/目录中。 #### 接口 ##### Web应用程序 Web应用程序的入口点index.php位于根目录中。该文件初始化所有内容并调用FrontController该类。 前端控制器将根据URL参数将传入的HTTP请求路由到插件控制器: ```html /index.php?module=CoreHome&action=index&… ``` 在这个例子中,前端控制器将调用插件index控制器上的动作CoreHome。 插件控制器返回在HTTP响应中发送的视图(通常为HTML内容)。 ##### 用户界面 Piwik的用户界面基于HTML和JavaScript。虽然一些页面是由PHP控制器(使用Twig模板引擎构建)提供的HTML文档,但Piwik UI的某些部分是由AngularJS构建的。 AngularJS是一个前端JavaScript框架,这意味着用户界面构建在客户端,数据从HTTP报告API中以JSON格式获取。这也意味着更好的用户体验,因为它让Piwik开发人员构建了一个更加动态和反应灵活的应用程序。 派维克的长期路线图的一部分是将派维克UI的越来越多的部分移到AngularJS。 在“使用Piwik的UI”指南中阅读更多信息。 ##### HTTP报表API HTTP报告API与Web应用程序类似。它的作用是以机器可读格式(XML,JSON,...)提供报告。 它具有相同的入口点,也由前端控制器调度。 ```html /index.php?module=API&method=SEO.getRank&… ``` 这个HTTP请求将像对控制器的任何其他调用一样处理:插件名称是API和否action,这将返回到index。 该Piwik\Plugin\API\Controller班将被调用,它将派遣调用API针对性,充当API调用第二前端控制器。在我们的例子中,SEO.getRank意味着该Piwik\Plugin\SEO\API::getRank()方法将被调用。 ##### HTTP Tracking API 此HTTP API允许JavaScript跟踪器将分析数据保存在Piwik中。 它的入口点与Piwik的Web应用程序和HTTP报告API不同:它是通过该piwik.php文件。 在“跟踪HTTP API”参考中了解更多信息。 命令行 Piwik通过./console脚本提供了一个命令行API 。此脚本使用Symfony控制台组件。 插件可以显示可以调用的CLI命令,如下所示: ```shell ./console visitorgenerator:generate-visits ``` 命令类位于plugins/*/CommandsPiwik并自动检测。 阅读更多关于“Piwik在命令行”的指南。 #### 数据模型,处理和存储 Piwik可以让您收集分析数据,然后稍后检索为报告。让我们看看Piwik如何模拟,处理和存储数据。 日志数据:原始分析数据 HTTP跟踪API(即Piwik\Tracker组件)接收原始分析数据,我们称之为“ 日志数据 ”。 日志数据在PHP中表示为Piwik\Tracker\Visit对象,并存储到下表中: ```shell log_visit 每次访问包含一个条目(返回访问者) log_action 包含网站上所有可能采取的行动(例如,唯一网址,网页标题,下载网址...) log_link_visit_action 每个行动的访客包含一个条目(页面浏览,...) log_conversion 包含访问期间发生的转化(与目标相符的操作) log_conversion_item 包含电子商务转换项目 ``` 这些表格是为快速插入而设计和优化的,因为跟踪API需要尽可能快地处理流量较大的网站。 这些表(及其相关的PHP实体)的内容将在“Piwik数据库模式”指南中有更详细的解释。 ##### 存档过程 以上表格并非针对提取高级别报表而设计或优化的:当有大量数据时,将日志条目聚合到日,周或月可能变得太密集。 该归档过程将读取日志数据汇总,以生产“ 数据归档 ”。数据汇总并存储为每个: - 天 - 周 - 月 - 年 - 自定义日期范围 归档数据可以是: - 数字指标:简单的数值(如页面浏览量) 这些存储在archive_numeric_*表中。值存储为float。 - 表记录:二维数据(可以是数值以及任何其他数据),表示为Piwik\DataTable对象 这些存储在archive_blob_*表中。DataTable对象被序列化为字符串并被压缩以被存储BLOB在表中。 DataTable存储在数据库中的对象是命名记录,以区分它们与DataTablePiwik的API所操纵和返回的对象,我们将其命名为报告。 在每个聚合级别处理和存储每个数字度量或表记录:日,周和月。例如,这意味着“进入页面”报告将被处理并存储在每月的每一天以及每个星期,月份,年份和自定义日期范围内。这样的数据是多余的,但这对于保证快速性能至关重要。 因为存档数据必须快速查询,所以每个月都会分开单独的表。我们将会有: - archive_numeric_2014_10:2014年10月的指标 - archive_blob_2014_10:2014年10月的报告 - archive_numeric_2014_11:2014年11月的指标 - archive_blob_2014_11:2014年11月的报告 - ... “Piwik数据库模式”指南中详细介绍了归档表的内容。归档过程在“归档”指南中有详细的说明。 #### 从存档数据到报告 如上所示,数据作为数字度量或表格记录存储。 报表是DataTable对象,由插件定义的API类提供。API类访问持久化的度量标准或记录,并将其转换为可呈现的报告。 有时候,一个持续的记录可能是几个API报告的来源。 您可以在“报告”指南中阅读有关如何创建和投放报告的更多详细信息。 #### 派维克的可扩展性点 Piwik Core仅定义主要的流程和行为。插件可以通过几个可扩展点扩展和定制它们: 注册事件或触发事件 执行派维克公认的特殊课程 扩展某些抽象基类