服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > ecshop教程 >

ecshop后台添加一个完整的统计用户信息的功能

时间:2014-06-03 03:39来源:未知 作者:最模板 点击:
开发ecshop大概有半年多时间了,每次改的功能也没有做总结和记录,今天添加完一个功能,记录一下吧,省得以后忘记又要麻烦去查找。 需求:在后台菜单-报表统计-下面添加-用户情况

开发ecshop大概有半年多时间了,每次改的功能也没有做总结和记录,今天添加完一个功能,记录一下吧,省得以后忘记又要麻烦去查找。

需求:在后台菜单-报表统计-下面添加-用户情况-的功能,包括:每周新增注册用户,每周累积注册用户,活跃用户-周内至少登陆1次,每月访问量等等。

第一步:建立数据库的表

 

ecshop后台添加一个完整的统计用户信息的功能
说明:个人本地数据库是:eshop,新建表名:ecs_user_situation。

第二步:建立存储过程

DELIMITER $$  
  1.   
  2. DROP PROCEDURE IF EXISTS `eshop`.`pro_users`$$  
  3.   
  4. CREATE DEFINER=`root`@`localhost` PROCEDURE `pro_users`()  
  5. BEGIN  
  6.     DECLARE week_count INT;  
  7.     DECLARE user_count INT;  
  8.     DECLARE over_count INT;  
  9.     DECLARE month_count INT;  
  10.     -- 每周注册用户  
  11.     SELECT COUNT(*) INTO week_count FROM ecs_users WHERE reg_time>(UNIX_TIMESTAMP(NOW())-7*24*60*60);  
  12.     -- 总注册用户  
  13.     SELECT COUNT(*) INTO user_count FROM ecs_users;  
  14.     -- 每周的活跃用户  
  15.     SELECT COUNT(*) INTO over_count FROM ecs_users WHERE last_login>(UNIX_TIMESTAMP(NOW())-7*24*60*60);  
  16.     -- 每月的访问量  
  17.     SELECT COUNT(*) INTO month_count FROM ecs_stats WHERE access_time>UNIX_TIMESTAMP(DATE_SUB(DATE_SUB(DATE_FORMAT(NOW(),'%y-%m-%d 00:00:00'),INTERVAL EXTRACT(DAY FROM NOW())-1 DAY),INTERVAL 0 MONTH));  
  18.       
  19.     INSERT INTO ecs_user_situation(week_count,user_count,over_count,month_count,week_time) VALUES (week_count,user_count,over_count,month_count,NOW());  
  20.     END$$  
  21.   
  22. DELIMITER ;  
说明:个人本地存储过程名字:pro_users。

第三步:建立触发器

[sql] view plaincopyprint?
 
  1. DELIMITER $$  
  2.   
  3. ALTER EVENT `eve_users` ON SCHEDULE EVERY 1 HOUR STARTS '2013-09-02 12:11:14' ON COMPLETION PRESERVE ENABLE DO BEGIN  
  4.         CALL pro_users();  
  5.     END$$  
  6.   
  7. DELIMITER ;  

说明:个人本地触发器名字:eve_users。

第四步:添加后台菜单

1.添加菜单URL

在目录admin/includes/inc_menu.php的-报表统计-的那部分代码下面添加:


 
  1. $modules['06_stats']['user_situation']  = 'user_situation.php?act=list';  

2.添加菜单名称

在目录languages/zh_cn/admin/common.php的/* 报表统计 */的那部分代码下面添加:

 
  1. $_LANG['user_situation'] = '用户情况';  

3.添加菜单权限

在目录admin/includes/inc_priv.php的-报表统计权限-的那部分代码下面添加:

$purview['user_situation']       = 'user_situation';  

4.添加管理权限

在目录languages/zh_cn/admin/priv_action.php添加下面的代码:

$_LANG['user_situation'] = '用户情况';  

5.添加数据库权限记录

INSERT INTO ecs_admin_action(parent_id,action_code) VALUES(6,'user_situation');  

第五步:业务逻辑代码

在目录admin下面添加user_situation.php,代码如下:

 
  1. <?php  
  2. /** 
  3.  * add by zbl 2013-08-29 
  4.  * 新增注册用户,累积注册用户,活跃用户-周内至少登陆1次,每月访问量 
  5.  * @var unknown_type 
  6.  */  
  7. define('IN_ECS', true);  
  8. //页面引用  
  9. require(dirname(__FILE__) . '/includes/init.php');  
  10. require_once(ROOT_PATH . '/' . ADMIN_PATH . '/includes/lib_goods.php');  
  11.   
  12. if($_REQUEST['act']=='list'){  
  13.       
  14.     $user_situation=get_user_situation();  
  15.       
  16.     $smarty->assign('user_situation_list'$user_situation['user_situation_list']);  
  17.     $smarty->assign('filter',       $user_situation['filter']);  
  18.     $smarty->assign('record_count'$user_situation['record_count']);  
  19.     $smarty->assign('page_count',   $user_situation['page_count']);  
  20.     $smarty->assign('full_page',    1);//解决分页查询出现页面重复情况  
  21.       
  22.     $smarty->assign('ur_here'$_LANG['user_situation']);  
  23.       
  24.     /* 在页脚显示内存信息 */  
  25.     assign_query_info();  
  26.     $smarty->display('user_situation.htm');  
  27.       
  28. }elseif($_REQUEST['act']=='query'){  
  29.       
  30.     $user_situation=get_user_situation();  
  31.       
  32.     $smarty->assign('user_situation_list'$user_situation['user_situation_list']);  
  33.     $smarty->assign('filter',       $user_situation['filter']);  
  34.     $smarty->assign('record_count'$user_situation['record_count']);  
  35.     $smarty->assign('page_count',   $user_situation['page_count']);  
  36.       
  37.     $smarty->assign('ur_here'$_LANG['user_situation']);  
  38.     $tpl =  'user_situation.htm';  
  39.     make_json_result($smarty->fetch($tpl), '',array('filter' => $user_situation['filter'], 'page_count' => $user_situation['page_count']));  
  40. }  
  41. ?>  
说明:这里有两个方法,一个是列表数据查询,另外一个是分页查询,每行的代码解析就不详细说。

第六步:操作数据库的方法

在目录admin/includes/lib_goods.php里面添加get_user_situation()方法:

 
  1. /** 
  2.  * zbl add 20130902 
  3.  * Enter description here ... 
  4.  */  
  5. function get_user_situation(){  
  6.     //分页  
  7.     $filter['record_count']=$GLOBALS['db']->GetOne('SELECT count(*) FROM '.$GLOBALS['ecs']->table('user_situation'));  
  8.     $filter = page_and_size($filter);  
  9.       
  10.     //排序  
  11.     $filter['sort_by']    = empty($_REQUEST['sort_by']) ? 'week_time' : trim($_REQUEST['sort_by']);  
  12.     $filter['sort_order'] = empty($_REQUEST['sort_order']) ? 'DESC' : trim($_REQUEST['sort_order']);  
  13.       
  14.     //查询  
  15.     $sql='SELECT week_count,user_count,over_count,month_count,week_time FROM '.$GLOBALS['ecs']->table('user_situation').' order by '.$filter[sort_by].' '.$filter[sort_order].' LIMIT ' . $filter['start'] . ',' . $filter[page_size];  
  16.     //echo $sql;  
  17.     $row = $GLOBALS['db']->getAll($sql);  
  18.       
  19.     //返回数据  
  20.     return array('user_situation_list' => $row'filter' => $filter'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']);  
  21. }  
说明:这里的代码顺序不能放错,$sql的where后面查询条件必须加上才可以实现分页功能,所以$filter['sort_by']和$filter['sort_order']这两个参数不能缺少,详细请查看/admin/js/listtable.js的listTable.sort()方法。

第七步:添加显示页面

在目录/admin/templates下面添加user_situation.htm代码如下:

 
  1. <!-- $Id: user_situation.htm 16752 2013-08-28  zbl $ -->  
  2. {if $full_page}  
  3. {include file="pageheader.htm"}  
  4. {insert_scripts files="../js/utils.js,listtable.js"}  
  5.   
  6. <form method="post" action="" name="listForm" onsubmit="return confirmSubmit(this)">  
  7. <div class="list-div" id="listDiv">  
  8. {/if}  
  9.     <table cellpadding="3" cellspacing="1">  
  10.       <tr>  
  11.         <th><a href="javascript:listTable.sort('week_time'); ">{$lang.week_time}</a></th>  
  12.         <th><a href="javascript:listTable.sort('week_count'); ">{$lang.week_count}</a></th>  
  13.         <th><a href="javascript:listTable.sort('user_count'); ">{$lang.user_count}</a></th>  
  14.         <th><a href="javascript:listTable.sort('over_count'); ">{$lang.over_count}</a></th>  
  15.         <th><a href="javascript:listTable.sort('month_count'); ">{$lang.month_count}</a></th>  
  16.       <tr>  
  17.       {foreach from=$user_situation_list item=user_situation}  
  18.           <tr>  
  19.             <td align="center">{$user_situation.week_time}</td>  
  20.             <td align="center">{$user_situation.week_count}</td>  
  21.             <td align="center">{$user_situation.user_count}</td>  
  22.             <td align="center">{$user_situation.over_count}</td>  
  23.             <td align="center">{$user_situation.month_count}</td>  
  24.           </tr>  
  25.       {foreachelse}  
  26.           <tr><td class="no-records" colspan="10">{$lang.no_records}</td></tr>  
  27.       {/foreach}  
  28.     </table>  
  29.       
  30.     <!-- 分页 -->  
  31.     <table id="page-table" cellspacing="0">  
  32.       <tr>  
  33.         <td align="right" nowrap="true">  
  34.         {include file="page.htm"}  
  35.         </td>  
  36.       </tr>  
  37.     </table>  
  38. {if $full_page}  
  39. </div>  
  40. </form>  
  41. <script type="text/javascript">  
  42.   listTable.recordCount = {$record_count};  
  43.   listTable.pageCount = {$page_count};  
  44.   {foreach from=$filter item=item key=key}  
  45.   listTable.filter.{$key} = '{$item}';  
  46.   {/foreach}  
  47. </script>  
  48. {include file="pagefooter.htm"}  
  49. {/if}  
说明:html页面注意引入js文件和用{if $full_page}{/if}来包含首位代码来解决分页查询出现的重复页面。

 

第八步:添加显示页面的列表名字

在目录languages/zh_cn/admin/下面添加user_situation.php代码如下:

<?php  
  1. /** 
  2.  * add by zbl 2013-08-30 
  3.  * Enter description here ... 
  4.  * @var unknown_type 
  5.  */  
  6. $_LANG['week_time'] = '时间';  
  7. $_LANG['week_count'] = '每周注册用户数';  
  8. $_LANG['user_count'] = '累积注册用户数';  
  9. $_LANG['over_count'] = '每周活跃用户数';  
  10. $_LANG['month_count'] = '每月访问量';  
  11. ?>  
第九步:测试运行

 

 

ecshop后台添加一个完整的统计用户信息的功能

说明:本人这里都是修改触发器出现的当天数据。

 

这个流程从修改数据库到顶层页面都有说明,ecshop的二次开发按照这个流程基本能开发所有功能了。详细的功能实现代码再慢慢研究就可以了。

(责任编辑:最模板)
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------