今天发现Ecshop后台的订单数据好像有点不正确,于是花了一小会时间看了下源码,看了之下发现两个问题,一个是Ecshop本身源码写得就有问题。打开order_status.php文件,翻到最下方,看function get_orderinfo($start_date, $end_date)的定义,其中所有的sql都用了下面的代码:
function get_orderinfo($start_date, $end_date) { $order_info = array(); /* 未确认订单数 */ $sql = 'SELECT COUNT(*) AS unconfirmed_num FROM ' .$GLOBALS['ecs']->table('order_info'). " WHERE order_status = '" .OS_UNCONFIRMED. "' AND add_time >= '$start_date'". " AND add_time < '" . ($end_date + 86400) . "'";
很显然,这里有个很明显的逻辑错误,即$end_date+86400,除非这里用户选择的开始时间和结束时间是同一天,否则没有必要加上86400(86400秒等于1天),这个错误结果会导致最后的订单统计数量已经不是在指定时间段内的数据,而是指定的时间后再加上一天。
另外Ecshop自己本身扯蛋的订单确认功能,导致的默认订单统计页面,只显示未确认,已确认,已成交,无效这四个信息。尼妹的这四个信息都不包括最最重要的已付款的订单数的信息,tiandi实在是搞不懂当初设计ecshop几个状态的人是不是脑子被驴踢过了,搞出一个鸟蛋的订单确认状态,这个状态用户很难理解为何意。
果断将无用的已确认订单统计代码改成已支付的统计代码:
/* 已确认订单数 */ $sql = 'SELECT COUNT(*) AS confirmed_num FROM ' .$GLOBALS['ecs']->table('order_info'). " WHERE order_status = '" .OS_CONFIRMED. "' AND shipping_status NOT ". db_create_in(array(SS_SHIPPED, SS_RECEIVED)) . " AND pay_status NOT" . db_create_in(array(PS_PAYED, PS_PAYING)) ." AND add_time >= '$start_date'". " AND add_time < '" . ($end_date + 86400) . "'"; $order_info['confirmed_num'] = $GLOBALS['db']->getOne($sql);
改成:
/* by tiandi 已支付订单数 */ $sql = 'SELECT COUNT(*) AS confirmed_num FROM ' .$GLOBALS['ecs']->table('order_info'). " WHERE pay_status =" . PS_PAYED ." AND shipping_status NOT" . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) ." AND add_time >= '$start_date'". " AND add_time < $end_date"; $order_info['confirmed_num'] = $GLOBALS['db']->getOne($sql);
最后。。。尼妹的难道头像网站被墙了???
文章评分1次,平均分5.0:★★★★★
你好!我们专业ECSHOP开发商?有需要,请访问 edait.cn
你好!我这里有个独立ip主机3.8折的广告图推荐给你如何?如果可以的话,请加我qq:2954243953
Ecshop在国内的电子商务系统来讲还是不错的
你又立功了。