ecshop的get_top10函数讲解

2010-03-25 00:18 来源:www.chinab4c.com 作者:admin

    本文主要讲解ecshop二次开发中get_top10($cats = '')函数功能.以下是讲解过程

 ecshop爱好者 23:34:22
get_top10
春天 23:34:23
也许
ecshop爱好者 23:34:36
里面的参数$cats表示分类ID
23:34:41
对方中止了语音通话,通话时长3分37秒。
ecshop爱好者 23:34:54
如果用在首页,调用所有的排行
ecshop爱好者 23:35:04
那么默认$cats=''

春天 23:35:21
我不说 就是明白
ecshop爱好者 23:35:33
就是在所有分类范围内取得排行
ecshop爱好者 23:35:37
排行的理由很简单 
ecshop爱好者 23:35:43
所有分类里面 
ecshop爱好者 23:35:48
在规定的时间内
ecshop爱好者 23:36:02
销售越多,就越在排行的前面 
ecshop爱好者 23:36:10
 $cats = get_children($cats);
    $where = !empty($cats) ? "AND ($cats OR " . get_extension_goods($cats) . ") " : '';
ecshop爱好者 23:36:23
get_children是取得分类下所有子分类 
春天 23:36:25
==?
春天 23:36:29
我这里没有这个啊
春天 23:36:35
估计版本不一样
ecshop爱好者 23:36:39
你肯定把他删除了 
春天 23:36:54
那你把你的那个传给我把
春天 23:37:28
就这样吧  继续
ecshop爱好者 23:38:10
$where = !empty($cats) ? "

 春天 23:31:24
开始吧  get_top10
春天 23:31:36
声音小
ecshop爱好者 23:32:29
听的清楚吗 
春天 23:32:17

春天 23:32:32
你话筒不好
ecshop爱好者 23:32:36
不是的 
ecshop爱好者 23:32:43
我笔记本
ecshop爱好者 23:32:50
不用话筒。都能说 
春天 23:32:58
能 
春天 23:33:05
说说试试
春天 23:32:03
还很小
春天 23:33:44
nono
春天 23:33:50
声音很小
ecshop爱好者 23:33:53
那就打字把 
ecshop爱好者 23:34:13
可能和网速也有关 
ecshop爱好者 23:34:22
get_top10
春天 23:34:23
也许
ecshop爱好者 23:34:36
里面的参数$cats表示分类ID
23:34:41
对方中止了语音通话,通话时长3分37秒。
ecshop爱好者 23:34:54
如果用在首页,调用所有的排行
ecshop爱好者 23:35:04
那么默认$cats=''

春天 23:35:21
我不说 就是明白
ecshop爱好者 23:35:33
就是在所有分类范围内取得排行
ecshop爱好者 23:35:37
排行的理由很简单 
ecshop爱好者 23:35:43
所有分类里面 
ecshop爱好者 23:35:48
在规定的时间内
ecshop爱好者 23:36:02
销售越多,就越在排行的前面 
ecshop爱好者 23:36:10
 $cats = get_children($cats);
    $where = !empty($cats) ? "AND ($cats OR " . get_extension_goods($cats) . ") " : '';
ecshop爱好者 23:36:23
get_children是取得分类下所有子分类 
春天 23:36:25
==?
春天 23:36:29
我这里没有这个啊
春天 23:36:35
估计版本不一样
ecshop爱好者 23:36:39
你肯定把他删除了 
春天 23:36:54
那你把你的那个传给我把
春天 23:37:28
就这样吧  继续
ecshop爱好者 23:38:10
$where = !empty($cats) ? "

 春天 23:50:24
OK
ecshop爱好者 23:50:26
他就要控制了 
春天 23:50:50
继续
春天 23:50:48
  就是某个分类有普通的 还有 被扩展到的
ecshop爱好者 23:50:57
是的 
ecshop爱好者 23:51:06
 /* 排行统计的时间 */
    switch ($GLOBALS['_CFG']['top10_time'])
    {
        case 1: // 一年
            $top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 365 * 86400) . "'";
        break;
        case 2: // 半年
            $top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 180 * 86400) . "'";
        break;
        case 3: // 三个月
            $top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 90 * 86400) . "'";
        break;
        case 4: // 一个月
            $top10_time = "AND o.order_sn >= '" . date('Ymd', gmtime() - 30 * 86400) . "'";
        break;
        default:
            $top10_time = '';
    }
ecshop爱好者 23:51:19
这些没什么说的。取得销售排行计算范围
ecshop爱好者 23:51:26
一年内排行 
春天 23:51:26
$GLOBALS['_CFG']['top10_time'] 这个是从shop_config里取的 
ecshop爱好者 23:51:31
一周排行
ecshop爱好者 23:51:34
这个是后台设置的 
ecshop爱好者 23:51:50
排行统计的时间:  所有 一年 半年 三个月 一个月  
ecshop爱好者 23:52:00

ecshop爱好者 23:52:15
通过$_CFG来调用 
春天 23:52:17
嗯 尽量说思路 不说语法
ecshop爱好者 23:52:24
这个是系统配置参数
ecshop爱好者 23:52:46
 $sql = 'SELECT g.goods_id, g.goods_name, g.shop_price, g.goods_thumb, SUM(og.goods_number) as goods_number ' .
           'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g, ' .
                $GLOBALS['ecs']->table('order_info') . ' AS o, ' .
                $GLOBALS['ecs']->table('order_goods') . ' AS og ' .
           "WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 $where $top10_time " ;
ecshop爱好者 23:52:54
这些是取得商品基本信息了 
ecshop爱好者 23:53:01
  //判断是否启用库存,库存数量是否大于0
    if ($GLOBALS['_CFG']['use_storage'] == 1)
    {
        $sql .= " AND g.goods_number > 0 ";
    }
ecshop爱好者 23:53:05
非常重要 
春天 23:53:08
从3个表里查的 
ecshop爱好者 23:53:16
是的 
春天 23:53:20
为什么?
ecshop爱好者 23:53:23
商品,定单,定单商品 
ecshop爱好者 23:53:33
排行需要从销售记录里面
ecshop爱好者 23:53:38
才能叫做销售排行 

ecshop爱好者 23:53:48
销售的越多,才能在排行前面 
ecshop爱好者 23:53:54
SUM(og.goods_number) as goods_number
春天 23:53:59
明白
ecshop爱好者 23:54:01
这个是统计每个商品 销售次数
ecshop爱好者 23:54:12
$sql .= ' AND og.order_id = o.order_id AND og.goods_id = g.goods_id ' .
           "AND (o.order_status = '" . OS_CONFIRMED . "' OR o.order_status >= '" . OS_SPLITED . "') " .
           "AND (o.pay_status = '" . PS_PAYED . "' OR o.pay_status = '" . PS_PAYING . "') " .
           "AND (o.shipping_status = '" . SS_SHIPPED . "' OR o.shipping_status = '" . SS_RECEIVED . "') " .
           'GROUP BY g.goods_id ORDER BY goods_number DESC, g.goods_id DESC LIMIT ' . $GLOBALS['_CFG']['top_number'];
ecshop爱好者 23:54:21
这些都是排行的控制条件 
ecshop爱好者 23:54:26
没什么重要的。
ecshop爱好者 23:54:30
最重要的在这里 
ecshop爱好者 23:54:39
 ORDER BY goods_number DESC
ecshop爱好者 23:54:53
goods_number是每个商品销售的数量统计 
春天 23:54:47
降序
ecshop爱好者 23:54:57
desc
ecshop爱好者 23:55:03
表示从高到低

春天 23:55:07
明白
ecshop爱好者 23:55:15
所以为什么销售多的,会排第一 
ecshop爱好者 23:55:20
10,9,5,4
ecshop爱好者 23:55:23
这样排序 
ecshop爱好者 23:55:29
 if ($GLOBALS['_CFG']['use_storage'] == 1)
    {
        $sql .= " AND g.goods_number > 0 ";
    }
 

 ecshop爱好者 23:58:16
库存要大于0。
春天 23:58:17
继续
ecshop爱好者 23:58:27
 $arr = $GLOBALS['db']->getAll($sql);
春天 23:58:35
==
ecshop爱好者 23:58:37
这个返回查询排行的数组 
春天 23:58:52
$sql .= ' AND og.order_id = o.order_id AND og.goods_id = g.goods_id ' .
           "AND o.order_status = '" . OS_CONFIRMED . "' " .
           "AND (o.pay_status = '" . PS_PAYED . "' OR o.pay_status = '" . PS_PAYING . "') " .
           "AND (o.shipping_status = '" . SS_SHIPPED . "' OR o.shipping_status = '" . SS_RECEIVED . "') " .
           'GROUP BY g.goods_id ORDER BY goods_number DESC, g.goods_id DESC LIMIT ' . $GLOBALS['_CFG']['top_number'];
春天 23:59:05
OS_CONFIRMED  这些从哪里来的呢?
ecshop爱好者 23:59:48
这个是全局变量 
ecshop爱好者 23:59:54
系统申明的 日期:2010-3-25
春天 0:00:01
在哪里?
ecshop爱好者 0:00:20

ecshop爱好者 0:00:27

ecshop爱好者 0:00:36

春天 0:00:52
说说最后那个for循环吧
ecshop爱好者 0:01:21
   for ($i = 0, $count = count($arr); $i < $count; $i++)
    {
        $arr[$i]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
                                    sub_str($arr[$i]['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $arr[$i]['goods_name'];
        $arr[$i]['url']        = build_uri('goods', array('gid' => $arr[$i]['goods_id']), $arr[$i]['goods_name']);
        $arr[$i]['thumb'] = get_image_path($arr[$i]['goods_id'], $arr[$i]['goods_thumb'],true);
        $arr[$i]['price'] = price_format($arr[$i]['shop_price']);
    }
春天 0:01:24
多占你2分钟  呵呵
ecshop爱好者 0:01:29
这个是循环数组 
春天 0:00:42
OK  肯定代表某种情况  
春天 0:00:44

ecshop爱好者 0:01:49
把所有排行数组放在$arr里面 
ecshop爱好者 0:01:57
$arr[$i]['short_name']
ecshop爱好者 0:02:05
这个是截取标题长度了
ecshop爱好者 0:02:15
url 表示商品的地址
ecshop爱好者 0:02:23
goods.php?id=4格式 
ecshop爱好者 0:02:28
thumb
ecshop爱好者 0:02:37
这个是缩略图
ecshop爱好者 0:02:47
price这个是价格格式话 
ecshop爱好者 0:02:54
格式化
ecshop爱好者 0:03:02
$100 
春天 0:03:08
$GLOBALS['_CFG']['goods_name_length'] > 0 ?
                                    sub_str($arr[$i]['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $arr[$i]['goods_name'];
ecshop爱好者 0:03:10
这个是美元格式 
春天 0:03:18
这个是截取多长多长吧
ecshop爱好者 0:03:27
是的。后台系统配置设置的
春天 0:03:32
build_uri('goods', array('gid' => $arr[$i]['goods_id']), $arr[$i]['goods_name']);
春天 0:03:41
这个是建立什么网址?
ecshop爱好者 0:03:47
这个是通过商品ID来生成路径 
ecshop爱好者 0:04:02
就建立goods.php?id=4的模式 
ecshop爱好者 0:04:23
比如商品ID是2
ecshop爱好者 0:04:29
那么他将生成
ecshop爱好者 0:04:38
goods.php?id=2

春天 0:04:41
嗯 
ecshop爱好者 0:05:06
基本上是这样了 
ecshop爱好者 0:05:08
呵呵 
ecshop爱好者 0:05:18
有那里不明白 ?
春天 0:05:18
嗯 明白了
ecshop爱好者 0:05:27
不着急。漫漫来 
春天 0:05:33
主要是通过好几个表  查了些东西 
春天 0

主讲人:ecshop爱好者

来源:中国B4C电子商务