Виджет "статистика minishop2"
Установка:
1. Загрузить файл в core / components / minishop2 / elements / widgets
2. Открыть Панели / Создать виджет
3. Имя: ms2_stat (или какое хотите).
Тип: файл
Путь к файлу: [[++ core_path]] компоненты / minishop2 / элементы / виджеты / widget.ms2_stat.php
4. Панель / Добавить виджет / ms2_stat (или то что указали в п.3)
<?php
/*
Статистика заказов
*/
$modx->addPackage('minishop2', MODX_CORE_PATH.'components/minishop2/model/');
$q_where = "`date` + INTERVAL ".date('j')." DAY > NOW()";
$chunkArr = array(
'lang' => $modx->config['manager_language'],
'new_count' => $modx->getCount('msOrder',array('status' => 1),$q_where),
'canceled_count' => $modx->getCount('msOrder',array('status' => 4),$q_where),
'done_count' => $modx->getCount('msOrder',array('status' => 2),$q_where),
'all_count' => $modx->getCount('msOrder')
);
$pages = $modx->getCollection('msOrder', array('status' => 1));
$current_month = date('n');
$months = array(
'1' => 'Январь',
'2' => 'Февраль',
'3' => 'Март',
'4' => 'Апрель',
'5' => 'Май',
'6' => 'Июнь',
'7' => 'Июль',
'8' => 'Август',
'9' => 'Сентябрь',
'10' => 'Октябрь',
'11' => 'Ноябрь',
'12' => 'Декабрь',
);
$stat_month = array();
$sql = "
SELECT month(`createdon`) AS `order_month`, count(*) AS `order_count`, SUM(cart_cost) AS order_cost
FROM ".$modx->getTableName('msOrder')."
WHERE year(`createdon`) = ".date('Y')."
GROUP BY month(`createdon`)
ORDER BY month(`createdon`)
";
$stmt = $modx->prepare($sql);
if ($stmt && $stmt->execute()) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$stat_month[] = array("name"=>$months[$row['order_month']],"count"=>$row['order_count'],"cost"=>$row['order_cost']);
}
$stmt->closeCursor();
}
$chunkArr['stat_month'] = json_encode($stat_month);
$tpl = <<<EOT
<script type="text/javascript">
Ext.chart.Chart.CHART_URL = 'assets/ext3/resources/charts.swf';
Ext.onReady(function(){
var store = new Ext.data.JsonStore({
fields: ['categorytitle', 'total'],
data: [{
categorytitle: 'Новые ([[+new_count]])',
total: [[+new_count]]
},{
categorytitle: 'Оплаченые ([[+done_count]])',
total: [[+done_count]]
},{
categorytitle: 'Отмененны ([[+canceled_count]])',
total: [[+canceled_count]]
]}
});
new Ext.Panel({
width: 300,
height: 250,
title: 'Статистика за этот месяц',
renderTo: 'ms2_stat',
border: false,
items: {
store: store,
xtype: 'piechart',
dataField: 'total',
categoryField: 'categorytitle',
series: [{
style: {
colors: ["#99CCFF", "#CCFFCC", "#FF99CC"]
}
]},
extraStyle:{
legend:{
display: 'bottom',
padding: 5,
font:{
family: 'Tahoma',
size: 11
}
}
}
}
});
var store2 = new Ext.data.JsonStore({
fields:['name', 'count', 'cost'],
data: [[+stat_month]]
});
new Ext.Panel({
title: 'Статистика по месяцам',
renderTo: 'ms2_stat2',
//width:500,
height:250,
layout:'fit',
border: false,
items: {
xtype: 'linechart',
store: store2,
xField: 'name',
yField: 'count',
yField: 'cost',
border: false,
listeners: {
itemclick: function(o){
/*
var rec = store2.getAt(o.index);
MODx.msg.status({
title: 'Item Selected',
message: 'You chose: '+rec.get('name'),
delay: 3
});
*/
}
},
series: [{
type: 'column',
displayName: 'Кол-во заказов за',
yField: 'count',
style: {
image:'bar.gif',
mode: 'stretch',
color:0x99BBE8
}
},{
type:'line',
displayName: 'Кол-во заказов за',
yField: 'count',
style: {
color: 0x15428B
}
},{
type: 'column',
displayName: 'Доход за',
yField: 'cost',
style: {
image:'bar.gif',
mode: 'stretch',
color:0x4db848
}
},{
type:'line',
displayName: 'Доход за',
yField: 'cost',
style: {
color: 0x2c6829
}
]}
}
});
});
</script>
<table width="100%">
<col width="*">
<col width="30">
<col width="*">
<col width="*">
<tr>
<td> </td>
<td>
<div id="ms2_stat"></div>
</td>
<td>
<div id="ms2_stat2"></div>
</td>
</tr>
<tr>
<td> </td>
<td>
<p style="color:#000;">Всего заказов: <b>[[+all_count]]</b></p>
</td>
<td> </td>
</tr>
</table>
EOT;
$chunk = $modx->newObject('modChunk');
$chunk->fromArray(array('name'=>"INLINE-".uniqid(),'snippet'=>$tpl));
$chunk->setCacheable(false);
$output = $chunk->process($chunkArr);
return $output;
Github: github.com/tanaevr/ms2_widget_statUpdate (13.10.2014):
1. Убрал LIMIT в выборке чтобы показывались сразу весь период статистики.
2. Добавил вывод графика оборота ( спасибо Ilya Ev ).
Комментарии: 24
Круто! Полезный виджет! Спасибо!
Возможно имеет смысл оформить в pull-реквест и внедрить по умолчанию в функционал minishop-а?
График что-то не рисуется( только «Всего заказов: 195»
у вас ошибка в скобках ]} а надо ]} в 2х местах. А так круто)
Илья, не могли бы вы поделиться исправленным вариантом скрипта?
Код уже исправленный тут в решении показан. Update от 13.10.2014.
Роман, таки не исправлен код… Строка 168, 91 и 73 — там стоит ]}, а должно быть ]}
там стоит ]}, а должно быть ]}А в чем разница?
Имелось ввиду, что вторая комбинация символов должна быть наоборот. Но судя по тому, что у Ильи в сообщении выше так написано, и в коде также, наверное Jevix меняет символы местами на ]} (хотя должно быть наоборот).
Спасибо, помогли разобраться!
Рад помочь)
Возможно вам будет интересно участие в наших проектах? Если интересно, напишите мне в Skype: svfedorof
Код с исправлениями, на всякий случай: pastebin.com/gEJaqLZw
Если есть дополнения, то добавляйте их через пулреквест github.com/tanaevr/ms2_widget_stat ;)
Это был баг в Tickets, сегодня как раз поправил</a, ноздесь еще не обновил.
Теперь обновил, должно работать.
Теперь обновил, должно работать.
а если немного поправить
$sql = "
SELECT month(`createdon`) AS `order_month`, count(*) AS `order_count` , SUM(cart_cost) AS order_cost
FROM ".$modx->getTableName('msOrder')."
WHERE year(`createdon`) = ".date('Y')."
GROUP BY month(`createdon`)
ORDER BY month(`createdon`)
LIMIT 12
";
$stmt = $modx->prepare($sql);
if ($stmt && $stmt->execute()) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$fullname=$months[$row['order_month']]."\n".ceil($row['order_cost']);
$stat_month[] = array("name"=>$fullname,"count"=>$row['order_count']);
}
$stmt->closeCursor();
}
То и оборот за месяц можно посмотреть, может будет полезно
Отличное решение! А как сделать, чтобы отображались два графика (наложенные друг на друга на одной диаграмме) — по обороту и по количеству заказов?
Возможно я что-то не так делаю, но если я указываю тип: «Файл» и указываю путь, то получаю 500 ошибку на главной системы управления. Если выбираю тип «Встроенный PHP», то все в порядке, но не прорисовываются графики: monosnap.com/image/hqpyhAMaO9HxxyyzBfNSsmS3m09tCW, хотя код полностью ваш брал: pastebin.com/ut4JG4n3
Заранее спасибо за ответ!
Заранее спасибо за ответ!
А покажите какой путь вы вставляете?
С путем вопрос решился.
Спасибо вам ОГРОМНЕЙШЕЕ за такой прекрасный widget. Ломал голову как для второго admina сделать только просмотр только статистики заказов. СПАСИБО!
Подскажите ПОЖАЛУЙСТА как сделать также только Orders вынести в dashboard или widget только для просмотра manager или admin.
Заранее спасибо.
Заранее спасибо.
Решил вопрос по другому кому интересно:
Для manager сделал custom policy template
dashboard пустой для него и доступ в настройках policy к components
Получается у manager есть доступ только к Orders minishop где он может:
— редактировать заказ
— сохранять заказ
— выставлять статус заказа
+ удобно с messages
тоесть ты с админки отправляешь manager сообщение (если у него постоянно занято)
сообщение такого рода
проверьте статутс заказа ID такой то
он смотрит оплату выставляет статус заказа (проплачен, отменён, отклонён) в minishop orders ( в полном его оригинальном компоненте ), как по мне очень удобно
Отдельное спасибо artemblog за урок на youtube
MODx Revo настройка прав пользователей
Для manager сделал custom policy template
dashboard пустой для него и доступ в настройках policy к components
Получается у manager есть доступ только к Orders minishop где он может:
— редактировать заказ
— сохранять заказ
— выставлять статус заказа
+ удобно с messages
тоесть ты с админки отправляешь manager сообщение (если у него постоянно занято)
сообщение такого рода
проверьте статутс заказа ID такой то
он смотрит оплату выставляет статус заказа (проплачен, отменён, отклонён) в minishop orders ( в полном его оригинальном компоненте ), как по мне очень удобно
Отдельное спасибо artemblog за урок на youtube
MODx Revo настройка прав пользователей
Подскажите пожалуйста. Не рисуются графики. Текс есть, Всего заказов есть. А графиков нет. В чем может быть проблема?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.