You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/application/controllers/analytics.php

364 lines
12 KiB
PHP

<?php
class Analytics extends CI_Controller
{
private $view_data = array();
function __construct()
{
parent::__construct();
$this->permission->is_admin();
// $this->output->enable_profiler(TRUE);
// 载入Model
$this->load->model("Analytics_visits_model");
$this->load->model("Analytics_pages_model");
$this->load->model('Analytics_historys_model');
$this->load->model('Orders_model');
// 载入helper
$this->load->helper('url');
// 所有该类页面都使用了菜单栏
$this->_menu();
}
// public function test(){
// $this->load->model('Analytics_visits_model');
// $this->load->model('Analytics_historys_model');
// $this->load->model('Analytics_pages_model');
// $this->Analytics_vists_model->test();
// $this->Analytics_pages_model->test();
// var_dump('OK');
// }
public function index()
{
$page = $this->input->get('per_page');
$site_code = $this->input->get('site_code');
$author = $this->input->get('author');
$order = $this->input->get('order');
$url = $this->input->get('url');
// 时间段
$start = $this->input->get('start');
if (strpos($start, '-') > 0)
{
$start = strtotime($start);
}
$end = $this->input->get('end');
if (strpos($end, '-') > 0)
{
$end = strtotime($end);
}
// 获取订单最多的页面ID数组
$rs = $this->Analytics_visits_model->get_pids_order_top($page, $site_code, $author, $start, $end);
if (!empty($rs))
{
// 数据存在的话继续查询
// 输出数据
$this->view_data['count'] = $rs->count;
$this->view_data['count_all'] = $rs->count_all;
// 获取页面列表
$this->view_data['list'] = $this->Analytics_pages_model->get_by_ids($rs->page_ids, $site_code, $author, $order, $url);
// var_dump($this->view_data['list'][0]);exit();
$this->view_data['cur_page'] = $page;
// 加载配置
$sites_config = $this->config->item('site');
$authors = array();
foreach ($sites_config as $value)
{
$sites[] = $value['site_code'];
$authors = array_merge($authors, $value['site_authors']);
}
$this->view_data['authors'] = $authors;
$this->view_data['sites'] = $sites;
// 分页
$page_url = site_url('analytics/index') . "?site_code=$site_code&start=$start&end=$end&author=$author&order=$order&url=$url";
$this->view_data['pages'] = $this->_page($page_url, $this->view_data['count_all']);
}
// var_dump($rs);exit;
// 参数传递
$this->load->view('header', array('meta_title' => '统计分析'));
$this->load->view('analytics/index', $this->view_data);
$this->load->view('footer');
}
/**
* 订单列表
*/
public function order()
{
$url = $this->input->get('url');
$page = $this->Analytics_pages_model->get_one_page($url);
$this->view_data['page'] = $page;
$this->view_data['list'] = '';
if (!empty($page))
{
$this->view_data["list"] = $this->Analytics_visits_model->get_page_orders($page->p_id);
}
$this->load->view('header');
$this->load->view('analytics/order', $this->view_data);
$this->load->view('footer');
}
/**
* 订单信息
* @param type $order_num
*/
public function order_detail($order_num = '')
{
if (!$order_num)
{
show_404();
}
$detail = $this->Analytics_visits_model->get_order_detail($order_num);
if ($detail === FALSE)
{
show_404();
}
// 更多的信息
// $this->output->enable_profiler(TRUE);
$confirm_info = $this->Orders_model->get_detail_confirm($order_num);
$this->view_data['confirm_info'] = $confirm_info;
$this->view_data['detail'] = $detail;
// 页面信息
$this->view_data['page'] = $this->Analytics_pages_model->get_one($detail->v_first_page_id);
// 访问记录
$this->view_data['history'] = $this->Analytics_historys_model->get_visit_history($detail->v_id);
$this->load->view('header');
$this->load->view('analytics/order_detail', $this->view_data);
$this->load->view('footer');
}
/**
* 生成统计代码
*/
public function code()
{
$sites_config = $this->config->item('site');
foreach ($sites_config as $value)
{
$sites[] = $value['site_code'];
}
$this->view_data['sites'] = $sites;
$this->view_data['cur_site'] = $this->input->get('site');
if (in_array($this->view_data['cur_site'], $this->view_data['sites']))
{
// 生成代码
// $url = site_url();
$url = 'http://i.chtcdn.com/info.php';
$this->view_data['code'] = <<<EOF
<script language="javascript">
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = '{$url}/website_analytics?'+'site_code={$this->view_data['cur_site']}&page_title='+document.title+'&page_referer='+escape(document.referrer);
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
EOF;
}
$this->load->view('header');
$this->load->view('analytics/code', $this->view_data);
$this->load->view('footer');
}
/**
* 最近访客列表
*/
public function visit()
{
$page = $this->input->get('per_page');
$page = $page ? $page : 0;
$site_code = $this->input->get('site_code');
$order_status = $this->input->get('order_status');
// 时间段
$start = intval(strtotime($this->input->get('start')));
$end = intval(strtotime($this->input->get('end')));
// 获取访客列表
$visits_list = $this->Analytics_visits_model->get_visits($page, $site_code, $start, $end, $order_status);
if ($visits_list === FALSE || empty($visits_list))
{
// 居然乱码...
header('content-type:text/html;charset=utf-8');
show_error('数据不存在或查询数据过大(超过10W)');
}
$this->view_data['list'] = $visits_list['list'];
$this->view_data['count'] = $visits_list['count'];
$this->view_data['cur_site_code'] = $site_code;
$this->view_data['cur_start'] = $start ? date('Y-m-d', $start) : '';
$this->view_data['cur_end'] = $end ? date('Y-m-d', $end) : '';
$this->view_data['cur_order_status'] = $order_status;
$this->view_data['cur_page'] = $page;
// 加载配置
$sites_config = $this->config->item('site');
$authors = array();
foreach ($sites_config as $value)
{
$sites[] = $value['site_code'];
$authors = array_merge($authors, $value['site_authors']);
}
$this->view_data['authors'] = $authors;
$this->view_data['sites'] = $sites;
// 分页
$page_url = site_url('analytics/visit') . "?site_code=$site_code&start=$start&end=$end&order_status=$order_status";
$this->view_data['pages'] = $this->_page($page_url, $visits_list['count']);
$this->load->view('header');
$this->load->view('analytics/visit', $this->view_data);
$this->load->view('footer');
}
/**
* 常见的退出界面
*/
public function leave()
{
$this->view_data['list'] = array();
$page_ids = $this->Analytics_visits_model->get_top_leave_pids();
if ($page_ids !== FALSE)
{
$this->view_data['list'] = $this->Analytics_pages_model->get_by_ids($page_ids);
}
$this->load->view('header');
$this->load->view('analytics/leave', $this->view_data);
$this->load->view('footer');
}
/**
* 显示某个访客的访问历史
* @param type $id
*/
public function history($id)
{
$id = intval($id);
// 获取访客信息
$visit = $this->Analytics_visits_model->get_visit($id);
if ($visit == FALSE)
{
show_404();
}
// 访问记录
$history = $this->Analytics_historys_model->get_visit_history($id);
$this->view_data['visit'] = $visit;
$this->view_data['history'] = $history;
$this->load->view('header');
$this->load->view('analytics/history', $this->view_data);
$this->load->view('footer');
}
/**
* 我的统计
*/
public function mine()
{
$admin_info = $this->session->userdata('session_admin');
$my_code = $admin_info['OPI_Code'];
$year = date("Y");
$month = date("m");
$day = date("d");
$data = array(
'author' => $my_code,
'count_order_day' => 0,
'count_order_month' => 0,
'count_order_year' => 0,
'day_begin' => mktime(0, 0, 0, $month, $day, $year),
'day_end' => mktime(0, 0, 0, $month, $day + 1, $year),
'month_begin' => mktime(0, 0, 0, $month, 1, $year),
'month_end' => mktime(0, 0, 0, $month + 1, 1, $year),
'year_begin' => mktime(0, 0, 0, 1, 1, $year),
'year_end' => mktime(0, 0, 0, 1, 1, $year + 1),
);
$auhor_analytics = $this->Analytics_visits_model->get_auhor_analytics($my_code);
$data = array_merge($data, $auhor_analytics);
$this->view_data = array_merge($this->view_data, $data);
$this->load->view('header');
$this->load->view('analytics/mine', $this->view_data);
$this->load->view('footer');
}
private function _menu()
{
$data['cur_site_code'] = $this->input->get('site_code');
$data['cur_author'] = $this->input->get('author');
$data['cur_order'] = $this->input->get('order');
$data['cur_url'] = $this->input->get('url');
$data['cur_start'] = $this->input->get('start');
$data['cur_end'] = $this->input->get('end');
// 加载配置
$sites_config = $this->config->item('site');
$sites = array();
$authors = array();
if (!empty($sites_config))
{
foreach ($sites_config as $value)
{
$sites[] = $value['site_code'];
$authors = array_merge($authors, $value['site_authors']);
}
}
$data['authors'] = $authors;
$data['sites'] = $sites;
$this->view_data['menu'] = $this->load->view('analytics/menu', $data, TRUE);
return $data;
}
/**
* 分页
* @param type $page_url
* @param type $total_rows
* @param type $per_page
* @return type
*/
private function _page($page_url, $total_rows, $per_page = 50)
{
// 分页
$this->load->library('pagination'); #加载分页的对象
$config['base_url'] = $page_url; #前后页链接
$config['total_rows'] = $total_rows; #辅助函数的一个方法
$config['per_page'] = $per_page;
$config['page_query_string'] = TRUE;
$config['anchor_class'] = "class='btn' ";
$config['first_link'] = '第一页';
$config['last_link'] = FALSE; // 由于最后的分页查询可能达到7-9s, 且查询意义不大, 隐藏分页last链接
$this->pagination->initialize($config);
return $this->pagination->create_links(); #丢到数组里面呆会渲染用
}
}