ecshop訂單狀態對應值:
order_status有5中狀態,並且當客戶確認收貨后,order_status的數值不一定是1也有可能是5。
order_status = 0表示訂單未確認
order_status = 1表示訂單已經確認
order_status = 2表示訂單已經取消
pay_status = 0表示未付款
pay_status = 2表示已付款
shipping_status = 3表示已配貨
shipping_status = 1表示已發貨
shipping_status = 2表示已收貨
ecshop商品分類列表,商品按照銷量排序,網上有些方法是判斷ecs_order_info.order_status=1來判斷訂單完成狀態,當在ecshop3.6測試發現,當客戶確認訂單后,order_status=5而非1,截圖如下:


截圖可以看到,客戶確認后,但未發貨,而order_status=1,所以取order_status=1作為判斷銷售完成情況,並不對!
考慮到客戶購買商品后,雖然收到貨物,但是也不一定會登錄后台,點擊確認收貨,所以在這里只要判斷pay_status=2,即客戶已付款即可。
找到category.php中category_get_goods方法的sql語句,修改如下:
$sql = 'SELECT (SELECT sum(goods_number) FROM ecs_order_goods where goods_id=g.goods_id and order_id in (select order_id from ecs_order_info where pay_status=2)) as sales, g.goods_id, g.goods_name,g.goods_number,g.goods_name_style, g.market_price, g.is_new, g.is_best, g.is_hot, g.shop_price AS org_price, ' .
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, g.promote_price, g.goods_type, " .
'g.promote_start_date, g.promote_end_date, g.goods_brief, g.goods_thumb , g.goods_img ' .
'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('member_price') . ' AS mp ' .
"ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' " .
"WHERE $where $ext ORDER BY $sort $order";
同時 $sort中設置按銷量排序標志,比如sales
剩下的工作,就比較簡單了,就不再贅述。
