Данные для суммарной статистики по кампании, отрисовка графика

parent 279c5501
......@@ -234,7 +234,9 @@ table.campaign-banners tbody tr td {
text-align: center;
}
textarea#campaign-stat
textarea#campaign-stat,
textarea#campaign-stat-total,
textarea#campaign-stat-cats
{
display: none;
}
......@@ -251,4 +253,64 @@ textarea#campaign-stat
#graph-stat
{
height: 370px;
}
\ No newline at end of file
}
/*
#table-stat
*/
.b-table_wrapp.report
{
display: none;
margin-top: 30px;
}
.table.table-striped
{
font-family: monospace;
}
.table.table-striped thead.sortable tr b
{
cursor: pointer;
}
.table.table-striped thead.sortable tr b.not-sorted
{
cursor: default;
}
.table.table-striped thead.sortable tr b.selected
{
color: #2CA02C;
}
.table.table-striped thead.sortable tr span
{
display: inline-block;
border-bottom: 2px solid red;
}
.table.table-striped thead tr b .arrow
{
display: none;
}
.table.table-striped thead.sortable tr b.selected .arrow.asc,
.table.table-striped thead.sortable tr b.selected.desc .arrow.desc
{
display: inline;
}
.table.table-striped thead.sortable tr b.selected .arrow.desc,
.table.table-striped thead.sortable tr b.selected.desc .arrow.asc
{
display: none;
}
.table.table-striped tbody tr.total
{
font-weight: bold;
}
\ No newline at end of file
......@@ -68,14 +68,28 @@ $(document).ready(function () {
(function(){
var
dataStat,
dataStat, dataStatTotal,
$statWrap = $('.campaign-stat'),
$statInfo = $('.chart-graph-stat-info', $statWrap),
$statError = $('.chart-graph-stat-error', $statWrap),
$statChart = $('.chart-graph-stat-error', $statWrap),
$statTable = $('.chart-graph-stat-error', $statWrap),
selectorStatChart = '#chart-graph-stat',
$statChart = $(selectorStatChart, $statWrap),
$statTable = $('.b-table_wrapp.report', $statWrap),
$tableCampaignStat = $('#table-line', $statTable),
targetActionValue = $('input[name=target_action]:checked').val(),
activeLine;
chart,
activeLine,
activeLines,
currencyFields = ['money'];
// Добавление впереди 0 у однозначных значений
function pad(number) {
var r = String(number);
if ( r.length === 1 ) {
r = '0' + r;
}
return r;
}
// Форматирование даты
function formatDate(date)
......@@ -83,37 +97,177 @@ $(document).ready(function () {
return date.getFullYear() +'-'+ pad(date.getMonth()+1) +'-'+ pad(date.getDate());
}
function valueFormat(value, ratio, id)
{
var
dataLine = activeLines[parseInt(id.replace('data', '')) - 1],
isCurrencyValue = currencyFields.indexOf(dataLine) > -1,
format = (isCurrencyValue) ? d3.format(',.2f') : d3.format(',.0f');
if (dataLine == 'OrderSum') {
format = d3.format(',.0f');
}
if (parseFloat(format(value)) == 0 && value != 0) {
var accuracy = Math.abs(Math.floor(Math.log10(value)));
return value.toFixed(accuracy);
}
if (isCurrencyValue) {
return format(value) + ' грн.';
} else {
return format(value);
}
}
function valueFormatTick(value)
{
var
isCurrencyValue = currencyFields.indexOf(activeLine) > -1,
format = (isCurrencyValue) ? d3.format(',.2f') : d3.format(',.0f');
return format(value);
}
// Получение данных для отрисовки графика Stat при старте:
if ($('#campaign-stat').val()) {
if ($('#campaign-stat').val() && $('#campaign-stat-total').val()) {
dataStat = JSON.parse($('#campaign-stat').val());
console.log('AAA dataStat = ', dataStat);
dataStatTotal = JSON.parse($('#campaign-stat-total').val());
} else {
ShowError();
}
console.log('AAA dataStat = ', dataStat);
console.log('AAA dataStatTotal = ', dataStatTotal);
function ShowInfo()
{
$statInfo.show();
$statError.hide();
$statChart.hide();
$statTable.hide();
}
function ShowError()
{
$statError.show();
$statInfo.hide();
$statChart.hide();
$statTable.hide();
}
switch(targetActionValue) {
case 'load':
activeLine = 'views';
break;
case 'view':
activeLine = 'views';
break;
case 'click':
activeLine = 'clicks';
break;
}
function getCheckedCategories() {
var listCats = [];
$('thead th input[type="checkbox"]', $tableCampaignStat).each(function(){
if ($(this).is(":checked")) {
listCats.push($(this).data('field'));
}
});
return listCats;
}
function renderChart() {
console.log('AAA renderChart');
var
dataPeriod = dataStat['period'],
dataValue = dataStat[activeLine],
titleFormat = formatDate,
formatTimeX = '%m-%d';
rotateX = null,
formatTimeX = '%m-%d',
selectedCategoriesId;
var
dataColumnsTemp = [['x'].concat(dataPeriod)],
names = {},
types = {},
axes = {},
colors = {};
// Определяем выбранные категории для графика:
selectedCategoriesId = getCheckedCategories();
console.log('AAA renderChart selectedCategoriesId', selectedCategoriesId);
// Скрываем график, если в таблице не выбраны категории:
if (selectedCategoriesId.length == 0) {
$statChart.hide();
return false;
} else {
$statChart.show();
}
console.log('AAA activeLines = ', activeLines);
var i = 0;
Object.keys(activeLines).forEach(function(activeLineItem){
if (selectedCategoriesId.indexOf(activeLineItem) > -1) {
i++;
dataColumnsTemp.push(['data'+i].concat(dataStat[activeLineItem]));
names['data'+i] = activeLines[activeLineItem]['title'];
types['data'+i] = 'area-spline';
axes['data'+i] = 'y';
colors['data'+i] = activeLines[activeLineItem]['color'];
}
});
console.log('AAA dataColumnsTemp ', dataColumnsTemp);
chart = c3.generate({
bindto: selectorStatChart,
data: {
x: 'x',
columns: dataColumnsTemp,
names: names,
types: types,
axes: axes,
colors: colors,
},
axis: {
x: {
type: 'timeseries',
categories: dataPeriod,
padding: {left: 0},
tick: {
culling: {max: 25},
format: formatTimeX,
rotate: rotateX
}
},
y: {
min: 0,
padding: {top: 50, bottom: 0},
tick: {
format: valueFormatTick
}
}
},
grid: {
x: {show: true},
y: {show: true},
},
tooltip: {
format: {
title: formatDate,
value: valueFormat
}
},
legend: {
show: true,
item: {
onclick: function (id) {
//toggleData(chart, id);
}
}
},
});
// Подсвечиваем Определяем индексы воскресенья:
dataPeriod.forEach(function(date, ind) {
if ((new Date(date)).getUTCDay() == 0) {
$('.c3-axis.c3-axis-x .tick').eq(ind).attr('class', 'tick sunday');
}
});
//chart.toggle(toggelDates);
};
......@@ -121,14 +275,40 @@ $(document).ready(function () {
console.log('AAA renderTable');
};
switch(targetActionValue) {
case 'load':
activeLine = 'views';
break;
case 'view':
activeLine = 'views';
break;
case 'click':
activeLine = 'clicks';
break;
}
activeLines = JSON.parse($('#campaign-stat-cats').val());
if (dataStat) {
renderChart();
renderTable();
// Отрисовка графика и таблицы по стартовым данным:
if (dataStat.status == 'Error') {
ShowError();
} else {
renderChart();
renderTable();
}
} else {
ShowInfo();
$statChart.hide();
$statTable.hide();
}
// Клик на checkbox в названии поля таблицы:
var $tableHeadColsChecks = $('thead th input[type="checkbox"]', $tableCampaignStat);
$tableHeadColsChecks.on('change', function(){
renderChart();
});
})();
});
......
......@@ -43,6 +43,16 @@ class CabinetAmSystem extends Common
{
const ACTION_LIST = 'list';
const ACTION_ITEM = 'item';
const CAMPAIGN_STAT_CATS = [
'views' => ['title' => 'Показы', 'color' => '#2CA02C'],
'clicks' => ['title' => 'Клики', 'color' => '#D62728'],
'money' => ['title' => 'Расход, грн.', 'color' => '#1F77B4'],
'reach' => ['title' => 'Охват', 'color' => '#FF7F0E'],
'ctr' => ['title' => 'CTR', 'color' => '#9467BD'],
'cpm' => ['title' => 'eCPM', 'color' => '#33C7B6'],
'cpc' => ['title' => 'eCPC', 'color' => '#7CADE2']
];
/**
* @param ServerRequestInterface $request
......@@ -144,6 +154,7 @@ class CabinetAmSystem extends Common
$date_end = $campaign->getDateEnd() ? : date("Y-m-d");
$dates = [$date_begin, $date_end];
$campaign_stat = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $dates);
$campaign_stat_total = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), null);
$active_line = 'views';
......@@ -188,6 +199,8 @@ class CabinetAmSystem extends Common
$data['banners'] = $banners;
$data['banners_stats'] = $banners_stats;
$data['campaign_stat'] = $campaign_stat;
$data['campaign_stat_total'] = $campaign_stat_total;
$data['campaign_stat_cats'] = self::CAMPAIGN_STAT_CATS;
$data['active_line'] = $active_line;
} else {
......
......@@ -372,7 +372,7 @@ class Statistics
if ($stats) {
// Добавляем спец. поля
function AddSpecialFields(&$stats)
$AddSpecialFields = function(&$stats)
{
if ($taget_action == 'load') {
$stats['views'] = $stats['loads'];
......@@ -393,17 +393,17 @@ class Statistics
$stats['cpc'] = ($clicks != 0) ? round(($money/$clicks)*100, 1) : 0;
$stats['money'] = round($stats['money'], 2);
}
};
if (!$dates)
{
AddSpecialFields($stats);
$AddSpecialFields($stats);
$dataStats = $stats;
}
else
{
foreach ($stats as $day => $stat) {
AddSpecialFields($stats[$day]);
$AddSpecialFields($stats[$day]);
}
// Формируем данные для временного промежутка
......@@ -427,7 +427,7 @@ class Statistics
$begin = new DateTime($dates[0]);
$end = new DateTime($dates[1]);
for($i = $begin; $i <= $end; $i->modify('+1 day')){
$all_period[] = $i->format("Y-m-d");
$all_period[] = $i->format("Y-m-d");
}
// Список дат, полученных в статистике:
......@@ -462,6 +462,7 @@ class Statistics
return $dataStats;
}
// Данные по статистике для баннеров
public function getBannersStat($banners_id_list, $dates)
{
......
......@@ -27,11 +27,17 @@
/** @var $this \Zend\View\Renderer\PhpRenderer */
$this->headScript()
->appendFile('/js/c3.min.js')
->appendFile('/js/d3.min.js')
//->appendFile('/js/script-feeds-stat-charts.js')
//->appendFile('/js/script-feeds-stat-table.js')
//->appendFile('/js/script-feeds-stat.js')
->appendFile('/js/adm/amsystem-campaign.js')
;
$this->headLink()
->appendStylesheet('/css/c3.css')
->appendStylesheet('/css/styles-amsystem.css')
;
......@@ -63,8 +69,11 @@ if (!$error) {
$campaign_geo = json_decode($campaign->getTargeting(), true)['geo'];
$banners = $this->banners;
$banners_stats = $this->banners_stats;
$campaign_stat = $this->campaign_stat;
$campaign_stat_total = $this->campaign_stat_total;
$campaign_stat_cats = $this->campaign_stat_cats;
$target_class = ($campaign_target_action == 'load') ? 'load-target' : '';
$link_campaigns_list = $this->url('user.cabinet.amsystem', ['lang' => $lang]);
......@@ -85,7 +94,7 @@ if (!$error) {
<section class="b-content__work inner">
<form id="campaign-create-form" method="post" action="">
<fieldset disabled="disabled">
<div class="panel panel-info">
<!-- Header -->
......@@ -97,245 +106,251 @@ if (!$error) {
<div class="panel-body">
<!-- Активность и Название -->
<div class="form-group title">
<input type="checkbox" id="campaign-active" name="campaign-active" <?php if ($campaign_active): ?>checked<?php endif; ?>>
<label class="campaign-title"><?= $campaign_title ?></label>
</div>
<!-- Даты проведения -->
<div class="form-group">
<label for="campaign-date-begin"><?= _t('Даты проведения')?></label>
c:
<input type='text' id="campaign-date-begin" class="form-control date-value" name="date_begin" value="<?= $campaign_date_begin ?>" />
по:
<input type='text' id="campaign-date-end" class="form-control date-value" name="date_end" value="<?= $campaign_date_end ?>" />
</div>
<!-- Ссылка -->
<div class="form-group url">
<label for="campaign-url"><?= _t('Ссылка')?></label>
<div class="value-show">
<?= $campaign_url ?>
<fieldset disabled="disabled">
<!-- Активность и Название -->
<div class="form-group title">
<input type="checkbox" id="campaign-active" name="campaign-active" <?php if ($campaign_active): ?>checked<?php endif; ?>>
<label class="campaign-title"><?= $campaign_title ?></label>
</div>
</div>
<div class="b-left">
<!-- Тип кампании -->
<!-- Даты проведения -->
<div class="form-group">
<label><?= _t('Тип кампании')?></label>
<input type="radio" id="campaign-buy-type-auction" name="buy_type" value="auction" <?php if ($campaign_buy_type == 'auction'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-buy-type-auction">Аукцион</label>
<input type="radio" id="campaign-buy-type-garantee" name="buy_type" value="garantee" <?php if ($campaign_buy_type == 'garantee'): ?>checked<?php endif; ?> disabled>
<label class="select-item disabled" for="campaign-buy-type-garantee">Гарантия</label>
<label for="campaign-date-begin"><?= _t('Даты проведения')?></label>
c:
<input type='text' id="campaign-date-begin" class="form-control date-value" name="date_begin" value="<?= $campaign_date_begin ?>" />
по:
<input type='text' id="campaign-date-end" class="form-control date-value" name="date_end" value="<?= $campaign_date_end ?>" />
</div>
<!-- Целевое действие -->
<div class="form-group">
<label><?= _t('Целевое действие')?></label>
<input type="radio" id="campaign-view-load" name="target_action" value="load" <?php if ($campaign_target_action == 'load'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-load">Показ</label>
<input type="radio" id="campaign-view-view" name="target_action" value="view" <?php if ($campaign_target_action == 'view'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-view">Реальный показ</label>
<input type="radio" id="campaign-view-click" name="target_action" value="click" <?php if ($campaign_target_action == 'click'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-click">Клик</label>
<!-- Ссылка -->
<div class="form-group url">
<label for="campaign-url"><?= _t('Ссылка')?></label>
<div class="value-show">
<?= $campaign_url ?>
</div>
</div>
<!-- Стоимость -->
<div class="form-group">
<?php
switch ($campaign_target_action) {
case 'load': $title_mark = '1000 показов'; break;
case 'view': $title_mark = '1000 реальных показов'; break;
case 'click': $title_mark = 'клик'; break;
}
?>
<label for="campaign-price"><?= _t('Стоимость')?></label>
<input type="number" min="0" step="0.1" id="campaign-price" class="form-control price" name="price" value="<?= $campaign_price ?>" />
грн. за <span class="price-title-mark"><?= $title_mark ?></span>
</div>
<div class="b-left">
<!-- Ограничения на посетителя -->
<div class="form-group campaign-visitor-limit__wrap">
<label><?= _t('Ограничения на посетителя')?></label><br />
<div class="value-show">
<?php
function declOfNum($number, $titles)
{
$cases = array (2, 0, 1, 1, 1, 2);
$format = $titles[ ($number%100 > 4 && $number %100 < 20) ? 2 : $cases[min($number%10, 5)] ];
return sprintf($format, $number);
}
foreach ($campaign_visitor_limit as $action => $data) {
if ($action == 'view') $titles = ['показ', 'показа', 'показов'];
if ($action == 'click') $titles = ['клик', 'клика', 'кликов'];
foreach ($data as $period => $value) {
switch ($period) {
case 'page': $title_mark = 'на странице'; break;
case 'hour': $title_mark = 'в час'; break;
case 'day': $title_mark = 'в сутки'; break;
case 'week': $title_mark = 'в неделю'; break;
case 'month': $title_mark = 'в месяц'; break;
}
if ($value) {
?>
<span><b><?= $value ?></b> <i><?= declOfNum($value, $titles) ?></i> <?= $title_mark ?></span><br />
<!-- Тип кампании -->
<div class="form-group">
<label><?= _t('Тип кампании')?></label>
<input type="radio" id="campaign-buy-type-auction" name="buy_type" value="auction" <?php if ($campaign_buy_type == 'auction'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-buy-type-auction">Аукцион</label>
<input type="radio" id="campaign-buy-type-garantee" name="buy_type" value="garantee" <?php if ($campaign_buy_type == 'garantee'): ?>checked<?php endif; ?> disabled>
<label class="select-item disabled" for="campaign-buy-type-garantee">Гарантия</label>
</div>
<!-- Целевое действие -->
<div class="form-group">
<label><?= _t('Целевое действие')?></label>
<input type="radio" id="campaign-view-load" name="target_action" value="load" <?php if ($campaign_target_action == 'load'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-load">Показ</label>
<input type="radio" id="campaign-view-view" name="target_action" value="view" <?php if ($campaign_target_action == 'view'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-view">Реальный показ</label>
<input type="radio" id="campaign-view-click" name="target_action" value="click" <?php if ($campaign_target_action == 'click'): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-view-click">Клик</label>
</div>
<!-- Стоимость -->
<div class="form-group">
<?php
} } }
switch ($campaign_target_action) {
case 'load': $title_mark = '1000 показов'; break;
case 'view': $title_mark = '1000 реальных показов'; break;
case 'click': $title_mark = 'клик'; break;
}
?>
<label for="campaign-price"><?= _t('Стоимость')?></label>
<input type="number" min="0" step="0.1" id="campaign-price" class="form-control price" name="price" value="<?= $campaign_price ?>" />
грн. за <span class="price-title-mark"><?= $title_mark ?></span>
</div>
</div>
<!-- Бюджет -->
<div class="form-group campaign-money-limit">
<label><?= _t('Бюджет')?></label><br />
<div class="value-show">
<?php
foreach ($campaign_money_limit as $period => $value) {
switch ($period) {
case 'total': $title_mark = 'грн. всего'; break;
case 'day': $title_mark = 'грн. в сутки'; break;
case 'week': $title_mark = 'грн. в неделю'; break;
case 'month': $title_mark = 'грн. в месяц'; break;
<!-- Ограничения на посетителя -->
<div class="form-group campaign-visitor-limit__wrap">
<label><?= _t('Ограничения на посетителя')?></label><br />
<div class="value-show">
<?php
function declOfNum($number, $titles)
{
$cases = array (2, 0, 1, 1, 1, 2);
$format = $titles[ ($number%100 > 4 && $number %100 < 20) ? 2 : $cases[min($number%10, 5)] ];
return sprintf($format, $number);
}
if ($value) {
?>
<span><b><?= $value ?></b> <?= $title_mark ?></span><br />
<?php
} }
?>
foreach ($campaign_visitor_limit as $action => $data) {
if ($action == 'view') $titles = ['показ', 'показа', 'показов'];
if ($action == 'click') $titles = ['клик', 'клика', 'кликов'];
foreach ($data as $period => $value) {
switch ($period) {
case 'page': $title_mark = 'на странице'; break;
case 'hour': $title_mark = 'в час'; break;
case 'day': $title_mark = 'в сутки'; break;
case 'week': $title_mark = 'в неделю'; break;
case 'month': $title_mark = 'в месяц'; break;
}
if ($value) {
?>
<span><b><?= $value ?></b> <i><?= declOfNum($value, $titles) ?></i> <?= $title_mark ?></span><br />
<?php
} } }
?>
</div>
</div>
</div>
<!-- Скорость открута -->
<div class="form-group">
<label><?= _t('Скорость открута')?></label>
<input type="radio" id="campaign-max-speed-true" name="max_speed" value="1" <?php if ($campaign_max_speed): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-max-speed-true">Максимальная</label>
<input type="radio" id="campaign-max-speed-false" name="max_speed" value="0" <?php if (!$campaign_max_speed): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-max-speed-false">Равномерная</label>
</div>
<!-- Бюджет -->
<div class="form-group campaign-money-limit">
<label><?= _t('Бюджет')?></label><br />
<div class="value-show">
<?php
<!-- Гео -->
<div class="form-group geo">
<label><?= _t('Гео (таргетинг)')?></label>
<div class="value-show">
<?php if ($campaign_geo): ?>
<?php if ($campaign_geo['country']): ?>
<?php
$title_values = $countries[$campaign_geo['country']['values'][0]];
if ($campaign_geo['special']) {
$title_special = '<b>(исключить неподконтрольные территории)</b>';
}
?>
<span><?= 'Страна' ?>: <b><?= $title_values ?></b> <?= $title_special ?></span><br />
<?php endif; ?>
<?php if ($campaign_geo['region']['values']): ?>
<?php
$title_mark = ($campaign_geo['region']['exclude']) ? 'кроме': 'только';
$title_values = [];
foreach ($campaign_geo['region']['values'] as $code) {
$title_values[] = str_replace(' область', '', $regions[$code]['name']);
}
$title_values = implode(", ", $title_values);
?>
<span><?= 'Области' ?> <i><?= $title_mark ?></i>: <b><?= $title_values ?></b></span><br />
<?php endif; ?>
<?php if ($campaign_geo['city']['values']): ?>
<?php
$title_mark = ($campaign_geo['city']['exclude']) ? 'кроме': 'только';
$title_values = [];
foreach ($campaign_geo['city']['values'] as $code) {
$title_values[] = $cities[$code]['name'];
foreach ($campaign_money_limit as $period => $value) {
switch ($period) {
case 'total': $title_mark = 'грн. всего'; break;
case 'day': $title_mark = 'грн. в сутки'; break;
case 'week': $title_mark = 'грн. в неделю'; break;
case 'month': $title_mark = 'грн. в месяц'; break;
}
$title_values = implode(", ", $title_values);
?>
<span><?= 'Города' ?> <i><?= $title_mark ?></i>: <b><?= $title_values ?></b></span><br />
<?php endif; ?>
<?php endif; ?>
if ($value) {
?>
<span><b><?= $value ?></b> <?= $title_mark ?></span><br />
<?php
} }
?>
</div>
</div>
</div>
<!-- Трекинг -->
<div class="form-group tracking_pixels">
<label><?= _t('Трекинг')?></label>
<div class="value-show">
<?php
<!-- Скорость открута -->
<div class="form-group">
<label><?= _t('Скорость открута')?></label>
<input type="radio" id="campaign-max-speed-true" name="max_speed" value="1" <?php if ($campaign_max_speed): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-max-speed-true">Максимальная</label>
<input type="radio" id="campaign-max-speed-false" name="max_speed" value="0" <?php if (!$campaign_max_speed): ?>checked<?php endif; ?>>
<label class="select-item" for="campaign-max-speed-false">Равномерная</label>
</div>
foreach ($campaign_tracking_pixels as $item => $values) {
switch ($item) {
case 'load': $title_mark = 'Показ'; break;
case 'view': $title_mark = 'Реальный показ'; break;
case 'click': $title_mark = 'Клик'; break;
}
if ($values) {
?>
<div><?= $title_mark ?></div>
<?php
foreach ($values as $value_item) {
?>
<div class="url"><?= $value_item ?></div>
<?php
} } }
?>
<!-- Гео -->
<div class="form-group geo">
<label><?= _t('Гео (таргетинг)')?></label>
<div class="value-show">
<?php if ($campaign_geo): ?>
<?php if ($campaign_geo['country']): ?>
<?php
$title_values = $countries[$campaign_geo['country']['values'][0]];
if ($campaign_geo['special']) {
$title_special = '<b>(исключить неподконтрольные территории)</b>';
}
?>
<span><?= 'Страна' ?>: <b><?= $title_values ?></b> <?= $title_special ?></span><br />
<?php endif; ?>
<?php if ($campaign_geo['region']['values']): ?>
<?php
$title_mark = ($campaign_geo['region']['exclude']) ? 'кроме': 'только';
$title_values = [];
foreach ($campaign_geo['region']['values'] as $code) {
$title_values[] = str_replace(' область', '', $regions[$code]['name']);
}
$title_values = implode(", ", $title_values);
?>
<span><?= 'Области' ?> <i><?= $title_mark ?></i>: <b><?= $title_values ?></b></span><br />
<?php endif; ?>
<?php if ($campaign_geo['city']['values']): ?>
<?php
$title_mark = ($campaign_geo['city']['exclude']) ? 'кроме': 'только';
$title_values = [];
foreach ($campaign_geo['city']['values'] as $code) {
$title_values[] = $cities[$code]['name'];
}
$title_values = implode(", ", $title_values);
?>
<span><?= 'Города' ?> <i><?= $title_mark ?></i>: <b><?= $title_values ?></b></span><br />
<?php endif; ?>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Трекинг -->
<div class="form-group tracking_pixels">
<label><?= _t('Трекинг')?></label>
<div class="value-show">
<?php
foreach ($campaign_tracking_pixels as $item => $values) {
switch ($item) {
case 'load': $title_mark = 'Показ'; break;
case 'view': $title_mark = 'Реальный показ'; break;
case 'click': $title_mark = 'Клик'; break;
}
if ($values) {
?>
<div><?= $title_mark ?></div>
<?php
foreach ($values as $value_item) {
?>
<div class="url"><?= $value_item ?></div>
<?php
} } }
?>
</div>
</div>
<div class="b-right">
<!-- Баннеры -->
<div class="form-group banners">
<label><?= _t('Баннеры')?></label>
<div>
<table class="table table-striped campaign-banners">
<thead>
<tr>
<th></th>
<th><span class="sort">Размер</span></th>
<th><span class="sort">Превью</span></th>
<th><span class="sort">Показы</span></th>
<th><span class="sort">Клики</span></th>
<th><span class="sort">CTR</span></th>
<th><span class="sort">Расход, грн.</span></th>
<th><span class="sort">eCPM</span></th>
<th><span class="sort">eCPC</span></th>
</tr>
</thead>
<tbody>
<?php if($banners): ?>
<?php foreach($banners as $banner): ?>
<?php $stat = $banners_stats[$banner['id']]; ?>
<tr data-id="<?= $banner['id'] ?>">
<td class="check"><input type="checkbox" <?php if ((bool)$banner['active']): ?>checked<?php endif; ?>></td>
<td class="stat"><span class="banner-size"><?= $banner['width'] ?>x<?= $banner['height'] ?></span></td>
<td class="stat"><span class="banner-preview" src="<?= $banner['img'] ?>" style="background-image: url(<?= $banner['img'] ?>)"></span></td>
<td class="stat <?= $target_class ?>"><?= $stat['views'] ?></td>
<td class="stat"><?= $stat['clicks'] ?></td>
<td class="stat"><?= $stat['ctr'] ?></td>
<td class="stat <?= $target_class ?>"><?= $stat['money'] ?></td>
<td class="stat"><?= $stat['cpm'] ?></td>
<td class="stat"><?= $stat['cpc'] ?></td>
</tr>
<?php endforeach ?>
<?php endif ?>
</tbody>
</table>
</div>
</div>
</div>
<div class="b-right">
<!-- Баннеры -->
<div class="form-group banners">
<label><?= _t('Баннеры')?></label>
<div>
<table class="table table-striped campaign-banners">
<thead>
<tr>
<th></th>
<th><span class="sort">Размер</span></th>
<th><span class="sort">Превью</span></th>
<th><span class="sort">Показы</span></th>
<th><span class="sort">Клики</span></th>
<th><span class="sort">CTR</span></th>
<th><span class="sort">Расход, грн.</span></th>
<th><span class="sort">eCPM</span></th>
<th><span class="sort">eCPC</span></th>
</tr>
</thead>
<tbody>
<?php if($banners): ?>
<?php foreach($banners as $banner): ?>
<?php $stat = $banners_stats[$banner['id']]; ?>
<tr data-id="<?= $banner['id'] ?>">
<td class="check"><input type="checkbox" <?php if ((bool)$banner['active']): ?>checked<?php endif; ?>></td>
<td class="stat"><span class="banner-size"><?= $banner['width'] ?>x<?= $banner['height'] ?></span></td>
<td class="stat"><span class="banner-preview" src="<?= $banner['img'] ?>" style="background-image: url(<?= $banner['img'] ?>)"></span></td>
<td class="stat <?= $target_class ?>"><?= $stat['views'] ?></td>
<td class="stat"><?= $stat['clicks'] ?></td>
<td class="stat"><?= $stat['ctr'] ?></td>
<td class="stat <?= $target_class ?>"><?= $stat['money'] ?></td>
<td class="stat"><?= $stat['cpm'] ?></td>
<td class="stat"><?= $stat['cpc'] ?></td>
</tr>
<?php endforeach ?>
<?php endif ?>
</tbody>
</table>
</div>
</div>
</div>
</fieldset>
<div class="b-clear"></div>
<div class="campaign-stat">
<textarea id="campaign-stat"><?= ($campaign_stat ? json_encode($campaign_stat) : '')?></textarea>
<textarea id="campaign-stat-total"><?= ($campaign_stat_total ? json_encode($campaign_stat_total) : '')?></textarea>
<textarea id="campaign-stat-cats"><?= ($campaign_stat_cats ? json_encode($campaign_stat_cats) : '')?></textarea>
<div class="chart-graph-stat-info">
<h2>По заданным параметрам статистика отсутствует</h2>
......@@ -344,10 +359,40 @@ if (!$error) {
<h2>Ошибка в статистике</h2>
<div class="message"></div>
</div>
<!-- График -->
<div id="chart-graph-stat" data-colors=<?= ($colors_active_lines ? json_encode($colors_active_lines) : '')?>></div>
<!-- Таблица -->
<?php ?>
<div id="table-stat" class="b-table_wrapp report">
<div class="b-content__loading"></div>
<table id="table-line" class="table table-striped">
<thead class="sortable">
<tr>
<th class="period" data-id="period">
<b class="main-cat selected" data-cat="date">Дата</b>
</th>
<?php foreach($campaign_stat_cats as $name => $cat): ?>
<th class="<?= $name ?>" data-id="<?= $name ?>">
<span style="border-color: <?= $cat['color'] ?>;">
<input type="checkbox" data-field="<?= $name ?>" checked />
</span>
<b class="cat" id="<?= $name ?>"><?= $cat['title'] ?></b>
</th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
</tbody>
</table>
<div id="chart-graph-stat"></div>
</div>
<?php ?>
<div id="table-stat"></div>
</div>
......@@ -357,7 +402,7 @@ if (!$error) {
</div>
</fieldset>
</form>
</section>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment