统计数据中的按用户统计添加了新用户统计功能
This commit is contained in:
parent
8f8631ee2f
commit
fd1a7260af
|
@ -195,7 +195,32 @@ class Admin_StatController extends Zend_Controller_Action
|
||||||
//按用户统计
|
//按用户统计
|
||||||
function userAction(){
|
function userAction(){
|
||||||
|
|
||||||
$ac = $this->_getParam('ac');
|
$this->view->ac = $ac = $this->_getParam('ac');
|
||||||
|
|
||||||
|
if($ac == "new")
|
||||||
|
{
|
||||||
|
$this->_helper->viewRenderer('user-new');
|
||||||
|
$this->view->year = $year = !empty($this->_getParam('year')) ? $this->_getParam('year'):date("Y");
|
||||||
|
$this->view->by = $by = !empty($this->_getParam('by')) ? $this->_getParam('by'):"month";
|
||||||
|
$userStatistics = new \Statistics\User();
|
||||||
|
|
||||||
|
if($by == "month")
|
||||||
|
{
|
||||||
|
$this->view->data = $userStatistics->getNewUsersByMonth($year);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($by == "year")
|
||||||
|
{
|
||||||
|
$this->view->data = $userStatistics->getNewUsersByYear($year);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($by == "monthavg")
|
||||||
|
{
|
||||||
|
$this->view->data = $userStatistics->getAverageSingupByMonth($year);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if($ac == "get")
|
if($ac == "get")
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
<ul class="nav nav-tabs">
|
||||||
|
<li <?= empty($this->ac) ? 'class="active"':"" ?>><a href="/admin/stat/user">概况</a></li>
|
||||||
|
<li <?= $this->ac == "new" ? 'class="active"':"" ?>><a href="/admin/stat/user/ac/new">新用户</a></li>
|
||||||
|
</ul>
|
|
@ -0,0 +1,158 @@
|
||||||
|
<?php
|
||||||
|
$this->headTitle($this->config->title->site);
|
||||||
|
$this->headTitle('后台管理');
|
||||||
|
$this->headTitle()->setSeparator(' - ');
|
||||||
|
$this->theme->AppendPlus($this,'jquery');
|
||||||
|
$this->theme->AppendPlus($this,'colorbox');
|
||||||
|
$this->headLink()->appendStylesheet('/css/jquery.jqplot.css');
|
||||||
|
$this->breadcrumb('<a href="/">首页</a>');
|
||||||
|
$this->breadcrumb('<a href="/admin">后台首页</a>');
|
||||||
|
$this->breadcrumb()->setSeparator(' > ');
|
||||||
|
?>
|
||||||
|
<script language="javascript" type="text/javascript" src="/static/js/plot/jquery.jqplot.js"></script>
|
||||||
|
<script language="javascript" type="text/javascript" src="/static/js/plot/plugins/jqplot.barRenderer.js"></script>
|
||||||
|
<script language="javascript" type="text/javascript" src="/static/js/plot/plugins/jqplot.pieRenderer.js"></script>
|
||||||
|
<script language="javascript" type="text/javascript" src="/static/js/plot/plugins/jqplot.categoryAxisRenderer.js"></script>
|
||||||
|
<script language="javascript" type="text/javascript" src="/static/js/plot/plugins/jqplot.highlighter.js"></script>
|
||||||
|
<script language="javascript" type="text/javascript" src="/static/js/plot/plugins/jqplot.pointLabels.js"></script>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span2">
|
||||||
|
<?= $this->partial('stat/left.phtml'); ?>
|
||||||
|
</div>
|
||||||
|
<div class="span10">
|
||||||
|
|
||||||
|
<?= $this->partial('stat/user-nav.phtml',array('ac'=>$this->ac)); ?>
|
||||||
|
|
||||||
|
<div class="cp">
|
||||||
|
方式:
|
||||||
|
<a href="/admin/stat/user/ac/new/by/month<?= $this->year ? "/year/".$this->year:"" ?>" class="btn btn-info <?= $this->by == "month" ? "disabled":"" ?>">按月</a>
|
||||||
|
<a href="/admin/stat/user/ac/new/by/year<?= $this->year ? "/year/".$this->year:"" ?>" class="btn btn-info <?= $this->by == "year" ? "disabled":"" ?>">按年</a>
|
||||||
|
<a href="/admin/stat/user/ac/new/by/monthavg<?= $this->year ? "/year/".$this->year:"" ?>" class="btn btn-info <?= $this->by == "monthavg" ? "disabled":"" ?>">月均值</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
年份:
|
||||||
|
<?php if(in_array($this->by,array("year","monthavg") )) {?><a href="/admin/stat/user/ac/new/by/<?= $this->by ?>/year/-1" class="btn btn-info">所有</a><?php } ?>
|
||||||
|
<?php for($i = (int)date("Y");$i>=2004 ;$i--)
|
||||||
|
{
|
||||||
|
$active = $this->year == $i ? "disabled":"";
|
||||||
|
echo '<a href="/admin/stat/user/ac/new/by/'.$this->by.'/year/'.$i.'" class="btn btn-info '.$active.'">'.$i.'</a>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php if($this->by == 'month' && !empty($this->data)){ ?>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<h4><?= $this->year ?>的按月新用户注册量统计</h4>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span3">
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>月份</th>
|
||||||
|
<th>增量</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php foreach($this->data as $k=>$v) {?>
|
||||||
|
<tr><td><?= $v['date_part'] ?></td><td><?= $v['count'] ?></td></tr>
|
||||||
|
<?php } ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="span9">
|
||||||
|
<!-- 统计图表 -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
<?php if($this->by == 'year' && !empty($this->data)){ ?>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<h4><?= $this->year == -1 ? "所有":$this->year ?>的新用户注册量统计</h4>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span3">
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>年份</th>
|
||||||
|
<th>增量</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php foreach($this->data as $k=>$v) {?>
|
||||||
|
<tr><td><?= $v['date_part'] ?></td><td><?= $v['count'] ?></td></tr>
|
||||||
|
<?php } ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="span9">
|
||||||
|
<!-- 统计图表 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function () {
|
||||||
|
<?php
|
||||||
|
$vars = array();
|
||||||
|
$month = array();
|
||||||
|
foreach ($this->data as $v)
|
||||||
|
{
|
||||||
|
$vars[] = $v['count'];
|
||||||
|
$month[]= "'".$v['date_part']."'";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
var s1 = [<?php echo join(',',$vars); ?>];
|
||||||
|
var ticks = [<?php echo join(',',$month); ?>];
|
||||||
|
|
||||||
|
plot1 = $.jqplot('chart_div_year_seq', [s1], {
|
||||||
|
seriesDefaults:{
|
||||||
|
renderer:$.jqplot.BarRenderer,
|
||||||
|
pointLabels: { show: true }
|
||||||
|
},
|
||||||
|
axes: {
|
||||||
|
xaxis: {
|
||||||
|
renderer: $.jqplot.CategoryAxisRenderer,
|
||||||
|
ticks: ticks
|
||||||
|
}
|
||||||
|
},
|
||||||
|
highlighter: { show: false }
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="content" id="chart_div_year_seq"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
<?php if($this->by == 'monthavg' && !empty($this->data)){ ?>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<h4><?= $this->year ?>的月均用户注册量</h4>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="span3">
|
||||||
|
<table class="table table-bordered table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>年份</th>
|
||||||
|
<th>月均</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php foreach($this->data as $k=>$v) {?>
|
||||||
|
<tr><td><?= $v['date_part'] ?></td><td><?= $v['count'] ?></td></tr>
|
||||||
|
<?php } ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="span9">
|
||||||
|
<!-- 统计图表 -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -10,33 +10,22 @@
|
||||||
$this->breadcrumb('<a href="/admin">后台首页</a>');
|
$this->breadcrumb('<a href="/admin">后台首页</a>');
|
||||||
$this->breadcrumb()->setSeparator(' > ');
|
$this->breadcrumb()->setSeparator(' > ');
|
||||||
?>
|
?>
|
||||||
<style>
|
<div class="row-fluid">
|
||||||
.charts{margin:30px 0px;}
|
<div class="span2">
|
||||||
.charts .title{color:#003366;}
|
<?= $this->partial('stat/left.phtml'); ?>
|
||||||
.cp {line-height:24px;}
|
</div>
|
||||||
.cp ul li{float:left;margin:0px 0px;}
|
<div class="span10">
|
||||||
.cp a{color:#4bb2c5;line-height:24px;padding:5px;}
|
|
||||||
.cp a.active,.cp a:hover{color:#FFF;background:#4bb2c5;}
|
|
||||||
</style>
|
|
||||||
<div id="leftPanel">
|
|
||||||
<?= $this->partial('stat/left.phtml'); ?>
|
|
||||||
</div>
|
|
||||||
<div id="rightPanel">
|
|
||||||
|
|
||||||
<div class="cp">
|
<?= $this->partial('stat/user-nav.phtml',array('ac'=>$this->ac)); ?>
|
||||||
<ul>
|
|
||||||
<li>
|
<div class="cp">
|
||||||
<a href="/admin/stat/user/ac/get/down/csv">导出csv格式</a>
|
<a href="/admin/stat/user/ac/get/down/csv" class="btn btn-info">导出csv格式</a>
|
||||||
</li>
|
<a href="/admin/stat/user/ac/get/down/json" class="btn btn-info">导出JSON格式</a>
|
||||||
<li>
|
</div>
|
||||||
<a href="/admin/stat/user/ac/get/down/json">导出JSON格式</a>
|
<div id="unitdata">
|
||||||
</li>
|
<b>点击列名进行排序</b>
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
<div class="dataTables_wrapper">
|
||||||
<div id="unitdata">
|
|
||||||
<b>点击列名进行排序</b>
|
|
||||||
</div>
|
|
||||||
<div class="dataTables_wrapper">
|
|
||||||
<table id="datatable" class="table table-bordered table-striped table_vam dataTable">
|
<table id="datatable" class="table table-bordered table-striped table_vam dataTable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -51,8 +40,9 @@
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
<?php
|
||||||
|
namespace Statistics;
|
||||||
|
|
||||||
|
use \Helpers\View as view;
|
||||||
|
use \Helpers\dbh;
|
||||||
|
use \Files\Files;
|
||||||
|
|
||||||
|
class User
|
||||||
|
{
|
||||||
|
private $db; //传入PDO对象.
|
||||||
|
private $config; //站点设置
|
||||||
|
|
||||||
|
protected $events = NULL;
|
||||||
|
public $table;
|
||||||
|
public $keyword;
|
||||||
|
public $order;
|
||||||
|
public $sort = "DESC";
|
||||||
|
|
||||||
|
function __construct($db = NULL,$mail = NULL)
|
||||||
|
{
|
||||||
|
if(empty($db))
|
||||||
|
{
|
||||||
|
$this->db = \Zend_Registry::get('db');
|
||||||
|
}else{
|
||||||
|
$this->db = $db;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->config = \Zend_Registry::get('config');
|
||||||
|
|
||||||
|
$this->table = new \Helpers\Table();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function ThisYear(){
|
||||||
|
return date("Y",time());
|
||||||
|
}
|
||||||
|
|
||||||
|
//按年统计新用户
|
||||||
|
public function getNewUsersByYear($year = 0)
|
||||||
|
{
|
||||||
|
if(empty($year))
|
||||||
|
{
|
||||||
|
$year = $this->ThisYear();
|
||||||
|
}
|
||||||
|
|
||||||
|
if($year == -1)
|
||||||
|
{
|
||||||
|
$sql = "select count(id),extract(year from ts_created)
|
||||||
|
from users
|
||||||
|
group by extract(year from ts_created)
|
||||||
|
order by date_part";
|
||||||
|
}else{
|
||||||
|
$sql = "select count(id),extract(year from ts_created)
|
||||||
|
from users
|
||||||
|
where extract(year from ts_created)='$year'
|
||||||
|
group by extract(year from ts_created)";
|
||||||
|
}
|
||||||
|
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
$rows = $rs->fetchAll();
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
//按月统计新用户
|
||||||
|
public function getNewUsersByMonth($year = 0)
|
||||||
|
{
|
||||||
|
if(empty($year))
|
||||||
|
{
|
||||||
|
$year = $this->ThisYear();
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "select count(id),extract(month from ts_created)
|
||||||
|
from users
|
||||||
|
where extract(year from ts_created)=$year
|
||||||
|
group by extract(month from ts_created)
|
||||||
|
order by date_part";
|
||||||
|
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
$rows = $rs->fetchAll();
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
//月均注册量
|
||||||
|
public function getAverageSingupByMonth($year = 0)
|
||||||
|
{
|
||||||
|
if(empty($year))
|
||||||
|
{
|
||||||
|
$year = $this->ThisYear();
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "select round(count(id)/12) as count,extract(year from ts_created)
|
||||||
|
from users
|
||||||
|
where extract(year from ts_created)='$year'
|
||||||
|
group by extract(year from ts_created)";
|
||||||
|
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
$rows = $rs->fetchAll();
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
//总用户量
|
||||||
|
public function getTotal($year = 0)
|
||||||
|
{
|
||||||
|
if(empty($year))
|
||||||
|
{
|
||||||
|
$year = $this->ThisYear();
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "";
|
||||||
|
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
$rows = $rs->fetchAll();
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
//平均申请数
|
||||||
|
public function getAverageApplicationTimes($times = 1)
|
||||||
|
{
|
||||||
|
if(empty($year))
|
||||||
|
{
|
||||||
|
$times = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "";
|
||||||
|
|
||||||
|
$rs = $this->db->query($sql);
|
||||||
|
$rows = $rs->fetchAll();
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue