自定义报告:扩展

这是我们的后续自定义报告指南。

实现API方法

我们的新报告将使用实时访问数据。为了得到它,我们的API方法将使用Live.getLastVisitsDetails方法:

公共函数getLastVisitsByBrowser($idSite, $period, $date, $segment = false) {$data = \Piwik\API\Request::processRequest('Live。getLastVisitsDetails', array('idSite' => $idSite, 'period' => $period, 'date' => $date, 'segment' => $segment, 'numLastVisitorsToFetch' => 100, 'minTimestamp' => false, 'flat' => false, 'doNotFetchActions' => true));数据- > applyQueuedFilters ();// TODO返回false;}

元数据将是一个数据表存储访问信息的实例;每次访问都是一个DataTable行。

现在我们已经有了一个访问列表,让我们考虑一下我们的报告将是什么样的。我们的报告将计算每个浏览器的访问次数。因此,每一行都有浏览器名称和访问次数。它可能看起来像这样:

标签| nb_visits  ------------------- Chrome | 24 Firefox | 32 Safari | 28

数据表列名

我们用的可能看起来很奇怪标签而且nb_visits我们报告的列名,而不是浏览器而且访问.这是因为通过API提供的报告应该易于由其他应用程序处理。使用标签,这在所有Matomo(以前的Piwik)报表中都很常见,这意味着使用API的应用程序可以很容易地分辨出哪一列描述了一行,而不需要知道报表的细节。

最终,在显示报表之前,这些列名将被替换为对人类查看者更有信息量的名称。

为了创建报告,我们将遍历每次访问并增加浏览器的计数器。柜台将是nb_visits列。

修改方法如下:

公共函数getLastVisitsByBrowser($idSite, $period, $date, $segment = false) {$data = \Piwik\API\Request::processRequest('Live。getLastVisitsDetails', array('idSite' => $idSite, 'period' => $period, 'date' => $date, 'segment' => $segment, 'numLastVisitorsToFetch' => 100, 'minTimestamp' => false, 'flat' => false, 'doNotFetchActions' => true));数据- > applyQueuedFilters ();//我们可以通过使用new DataTable()来创建一个新实例,//但是我们会丢失DataTable的元数据,这是很有用的。$result = $data->getEmptyClone($keepFilters = false);foreach ($data->getRows() as $visitRow) {$browserName = $visitRow->getColumn('browserName');//尝试并获得在浏览器的结果数据表的行$browserRow = $result->getRowFromLabel($browserName);//如果这个浏览器没有行,创建它if ($browserRow === false) {$result->addRowFromSimpleArray(array('label' => $browserName, ' nb_访问量' => 1));} else{//如果有一行,增加计数器$counter = $browserRow->getColumn(' nb_visitors ');$browserRow->setColumn(' nb_visitors ', $counter + 1); } } return $result; }

如果你去参观http://localhost/index.php?module=API&method=MyPlugin.getLastVisitsByBrowser&idSite=1&date=today&period=week你应该看看新报告!

实时报告vs存档报告

这个新的API方法直接访问访问数据。这是因为该报表是实时报表。大多数报告不是实时的,因为处理访问数据所花费的时间会使接口不可用。

存档报告计算和缓存归档的过程.要了解更多,请阅读Matomo's数据模型指南。

显示报表

现在我们已经定义了一个新的报表,我们需要定义报表应该如何显示。我们会回到GetLastVisitsByBrowser类,并修改configureView ()方法:

public function configureView(ViewDataTable $view){//必须配置ViewDataTable,以使报表的显示完美。//通过修改ViewDataTable::$config对象的属性来实现。//禁用“显示所有列”页脚图标$view->config->show_table_all_columns = false;// 'label'列的标题为'Browser' $view->config->addTranslation('label', 'Browser');$view->config->columns_to_display = array_merge(array('label'), $this->metrics);}

由于我们将只显示访问者的数量,而不是Matomo默认假设的唯一访问者或操作的数量,因此我们需要修改中所支持的指标init ()报告方法如下:

$this->metrics =数组(' nb_访问量');

报告现在应该是这样的:

报告可视化

ViewDataTable类输出报告显示.报表可视化以某种方式显示分析报表。它们可以是任何格式,例如HTML + JavaScript(就像默认的表格可视化,或图形之一)或图像(如sparkline可视化)。

插件可以创建自己的可视化。要了解如何做到,请阅读我们的报表数据可视化指南(当然是在您完成本指南之后)。

实时更新报表

所以现在有一个带有报告的页面,显示了最新访问者使用的浏览器。它使用实时数据——但它不是真正的实时,因为几分钟后,报告就会过时。为了使报告更加实时,我们将每10秒自动更新一次报告。

添加JavaScript文件到Matomo

为了使报表重新加载自身,我们必须编写一些JavaScript代码。这意味着我们需要一个JavaScript文件。

创建一个空的javascript / plugin.js文件在您的插件目录。然后注册到AssetManager.getJavaScriptFiles事件(阅读更多有关事件),让Matomo包含这个javascript文件:

类MyPlugin扩展\Piwik\Plugin{公共函数registerEvents(){返回数组('资产管理器。getJavaScriptFiles' => 'getJavaScriptFiles',);}公共函数getJavaScriptFiles(&$files) {$files[] = 'plugins/MyPlugin/javascripts/plugin.js';}}

请记住,Matomo只会在以下情况下直接包含此文件disable_merged_assets在您的ini配置中启用:

[开发]disable_merged_assets = 1

如果禁用此选项,Matomo将把所有JavaScript文件合并为一个以优化页面加载时间,但这意味着任何更改plugin.js会被忽略。

重新加载报告

在你的plugin.js文件中,添加以下代码:

美元(文档)时(function () { setInterval(function () { // get the root element for our report var $dataTableRoot = $('.dataTable[data-report="MyPlugin.getLastVisitsByBrowser"]'); // in the UI, the root element of a report has a JavaScript object associated to it. // we can use this object to reload the report. var dataTableInstance = $dataTableRoot.data('uiControlObject'); // we want the table to be completely reset, so we'll reset some // query parameters then reload the report dataTableInstance.resetAllFilters(); dataTableInstance.reloadAjaxDataTable(); }, 10 * 1000); });

如您所见,我们所有的javascript代码都在美元(文档)时回调。这是因为我们希望在页面完全加载时执行JavaScript代码。

现在,如果您在浏览器中打开报表,您将看到报表每10秒重新加载一次。

Baidu