request->getParam('visitor'); if($visitor){ $coll = 'users'; }else{ $coll = 'visitors'; } $mongo = new MongoClient(DB_CONNETC); $db = $mongo->wozhua_data;//库 $collection = $db->selectCollection($coll); $keys = array("channel" => 1); $initial = array("count" => 0); $reduce = "function (obj, prev) { prev.count++; }"; $g = $collection->group($keys, $initial, $reduce); $this->render('all',array('data'=>$g['retval'],'sum'=>$g['count'])); } public function actionByDay(){ $week_data = array(); $data['date_str'] = ''; $visitor = Yii::app()->request->getParam('visitor'); if($visitor){ $coll = 'users'; $time_condition = 'register_time'; }else{ $coll = 'visitors'; $time_condition = 'first_time'; } $mongo = new MongoClient(DB_CONNETC); $db = $mongo->wozhua_data; for($i=6;$i>=0;$i--){ $day_start = strtotime(date('Ymd'))-$i*86400; $date = date('m-d',$day_start); $data['date_str'].= '"'.$date.'",'; $day_last = $day_start+86400; $collection = $db->selectCollection($coll); $keys = array("channel"=>1); $initial = array("count"=>0); $reduce = "function (obj, prev) { prev.count++; }"; $condition = array('condition' => array($time_condition => array( '$gte' => $day_start,'$lt' => $day_last))); $g = $collection->group($keys, $initial, $reduce, $condition); $week_data[$date] = $g['retval']; } $channel = array(); foreach ($week_data as $value) { if(is_array($value)){ foreach ($value as $val) { if(!empty($val['channel'])&&!in_array($val['channel'],$channel)){ $channel[] = $val['channel']; } } } } $data['channel_str'] =''; foreach ($channel as $value) { $data['channel_str'].= '"'.$value.'",'; } $data['channel_str'] = substr($data['channel_str'],0,mb_strlen($data['channel_str'])-1); $data['date_str'] = substr($data['date_str'],0,mb_strlen($data['date_str'])-1); $data['channel_data'] = array(); foreach ($channel as $t_channel) { $data['channel_data'][$t_channel] = ''; foreach ($week_data as $key => $value) { foreach ($value as $val) { if($val['channel']==$t_channel){ $t_count = $val['count']; } } if (isset($t_count)) { $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].$t_count.','; }else{ $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].'0'.','; } unset($t_count); } } $this->render('view',array('data'=>$data)); } public function actionByWeek(){ $month_data = array(); $data['date_str'] = ''; $visitor = Yii::app()->request->getParam('visitor'); if($visitor){ $coll = 'users'; $time_condition = 'register_time'; }else{ $coll = 'visitors'; $time_condition = 'first_time'; } $mongo = new MongoClient(DB_CONNETC); $db = $mongo->wozhua_data; for($i=4;$i>=0;$i--){ $day_start = strtotime(date("Y-m-d",mktime(0,0,0,date("m"),date("d")-date("w")+1,date("Y"))))-$i*604800; $date = date('W',$day_start); $data['date_str'].= '"第'.$date.'周",'; $day_last = $day_start+604800; $collection = $db->selectCollection($coll); $keys = array("channel"=>1); $initial = array("count"=>0); $reduce = "function (obj, prev) { prev.count++; }"; $condition = array('condition' => array($time_condition => array( '$gte' => $day_start,'$lt' => $day_last))); $g = $collection->group($keys, $initial, $reduce, $condition); $month_data[$date] = $g['retval']; } $channel = array(); foreach ($month_data as $value) { if(is_array($value)){ foreach ($value as $val) { if(!empty($val['channel'])&&!in_array($val['channel'],$channel)){ $channel[] = $val['channel']; } } } } $data['channel_str'] =''; foreach ($channel as $value) { $data['channel_str'].= '"'.$value.'",'; } $data['channel_str'] = substr($data['channel_str'],0,mb_strlen($data['channel_str'])-1); $data['date_str'] = substr($data['date_str'],0,mb_strlen($data['date_str'])-1); $data['channel_data'] = array(); foreach ($channel as $t_channel) { $data['channel_data'][$t_channel] = ''; foreach ($month_data as $key => $value) { foreach ($value as $val) { if($val['channel']==$t_channel){ $t_count = $val['count']; } } if (isset($t_count)) { $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].$t_count.','; }else{ $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].'0'.','; } unset($t_count); } } $this->render('view',array('data'=>$data)); } public function actionByMonth(){ $month_data = array(); $data['date_str'] = ''; $visitor = Yii::app()->request->getParam('visitor'); if($visitor){ $coll = 'users'; $time_condition = 'register_time'; }else{ $coll = 'visitors'; $time_condition = 'first_time'; } $mongo = new MongoClient(DB_CONNETC); $db = $mongo->wozhua_data; for($i=5;$i>=0;$i--){ $this_month = date('m'); $temp_month = $this_month-$i; $time_str = date('Y-').$temp_month.'-01'; $day_start = strtotime($time_str); $date = date('F',$day_start); $data['date_str'].= '"'.$date.'",'; $day_last = strtotime(date('Y-m-d', strtotime(date('Y-m-01', strtotime($time_str)) . ' +1 month -1 day'))); $collection = $db->selectCollection($coll); $keys = array("channel"=>1); $initial = array("count"=>0); $reduce = "function (obj, prev) { prev.count++; }"; $condition = array('condition' => array($time_condition => array( '$gte' => $day_start,'$lt' => $day_last))); $g = $collection->group($keys, $initial, $reduce, $condition); $month_data[$date] = $g['retval']; } $channel = array(); foreach ($month_data as $value) { if(is_array($value)){ foreach ($value as $val) { if(!empty($val['channel'])&&!in_array($val['channel'],$channel)){ $channel[] = $val['channel']; } } } } $data['channel_str'] =''; foreach ($channel as $value) { $data['channel_str'].= '"'.$value.'",'; } $data['channel_str'] = substr($data['channel_str'],0,mb_strlen($data['channel_str'])-1); $data['date_str'] = substr($data['date_str'],0,mb_strlen($data['date_str'])-1); $data['channel_data'] = array(); foreach ($channel as $t_channel) { $data['channel_data'][$t_channel] = ''; foreach ($month_data as $key => $value) { foreach ($value as $val) { if($val['channel']==$t_channel){ $t_count = $val['count']; } } if (isset($t_count)) { $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].$t_count.','; }else{ $data['channel_data'][$t_channel] = $data['channel_data'][$t_channel].'0'.','; } unset($t_count); } } $this->render('view',array('data'=>$data)); } }