В настоящее время я занимаюсь разработкой пользовательского отчета, который расширяет имена содержимого отчета данными из другой базы данных. Я хотел бы добавить подтаблицу, в которой показано, какие фрагменты содержимого были нажаты.
Это мой код:
public function getMyReport($idSite, $period, $date, $segment = false)
{
$data = \Piwik\API\Request::processRequest('Contents.getContentNames', array(
'idSite' => $idSite,
'period' => $period,
'date' => $date,
'segment' => $segment,
'filter_limit'=> -1,
'expanded'=>1,
));
$data->applyQueuedFilters();
$result = $data->getEmptyClone($keepFilters = false);
foreach ($data->getRows() as $visitRow) {
//GET ADDITIONAL DATA FROM ANOTHER DATABASE
$row = new \Piwik_DataTable_Row(array(array(
'ID' => $visitRow['label'],
'Seen' => $visitRow['nb_impressions'],
'Clicked' => $visitRow['nb_interactions'],
'Click Rate' => $visitRow['interaction_rate'],
))); //GETTING MY ADDITIONAL DATA
$subtabledata=\Piwik\API\Request::processRequest('Contents.getContentNames', array(
'idSite' => $idSite,
'period' => $period,
'date' => $date,
'segment' => $segment,
'filter_limit'=> -1,
'idSubtable'=>1,
));
$subtabledata->applyQueuedFilters();
$subresult = new DataTable();
foreach ($subtabledata->getRows() as $subtabledataRow){
$subRow =new \Piwik_DataTable_Row(array(Row::COLUMNS => array(
'label'=>$subtabledataRow['label'],
'Seen' => $subtabledataRow['nb_impressions'],
'Clicked' => $subtabledataRow['nb_interactions'],
'Click Rate' => $subtabledataRow['interaction_rate'],
)));
$subresult->addRow($subRow);
};
$row->setSubtable($subresult);
$result->addRow($row);
}
return $result;
}
В подтаблице в отчете отображается следующее сообщение об ошибке: Нет данных. для этого отчета. Нужно ли указывать подтаблицу где-нибудь в GetMyReport. php? Я довольно смущен. Когда я вывожу свой $ subRow через var_dump, я получаю следующую информацию:
object(Piwik_DataTable_Row)#3145 (5) { ["maxVisitsSummed"]=> int(0) ["metadata": "Piwik\DataTable\Row":private]=> array(0) { } ["isSubtableLoaded": "Piwik\DataTable\Row":private]=> bool(false) ["subtableId"]=> NULL ["storage": "ArrayObject":private]=> array(4) { ["label"]=> string(5) "list" ["lakes"]=> int(1) ["Clicked"]=> int(0) ["Click Rate"]=> string(2) "0%" } }
Кто-нибудь знает, что я делаю неправильно?
Второй вопрос: Мой первый запрос не возвращает idsubdatatable - мне нужна дополнительная заметка в запросе?