Ecstore开发之购物车模块-购物车数据加载

点击进入购物车

当点击进入购物车的时候进入控制器cart.php中的index方法,调用_common方法

_common方法
$this->_common(1);

//组织购物车数据(一个大数组),定义购物车数据项的render,优惠信息项的render。。。
public function _common($flag=0)

//处理后的购物车数据的获取统一方法get_objects
$aCart = $this->mCart->get_objects($this->_request->get_params(true));
get_objects

返回的是购物车中的数据,所有的数据都是处理过的,如果有商品促销或者订单促销都进行过处理

get_objects方法是通过注册services的方式对购物车的数据进行处理的,根据get_order的大小进行优先级处理

<services id='b2c_cart_process_apps'>
    <class>b2c_cart_process_get</class>  # get_order = 99
    <class>b2c_cart_process_prefilter</class> #get_order = 90
    <class>b2c_cart_process_postfilter</class> # ger_order = 80
</services>

b2c_cart_process_get:获取到的是购物车中的商品的详细数据

b2c_cart_process_profilter:对购物车中的商品进行商品促销过滤及加载商品促销数据

b2c_cart_process_postfilter:对购物车中的商品进行订单促销过滤及加载订单促销数据

最先进入的是b2c_cart_process_get类中进行处理,调用的是process方法

$object->process($aData,$aResult,$aConfig);
b2c_cart_process_get

在b2c_cart_process_get类中主要是把购物车的数据进行组织,并不包含促销等处理

通过servies b2c_cart_object_apps获取购物车不同数据(优惠劵,商品,赠品)

//b2c services 注册的类
<services id='b2c_cart_object_apps'>
    <class>b2c_cart_object_goods</class>  # get_order =  ,get_type = 'goods'
    <class>b2c_cart_object_coupon</class> #get_order =  ,get_type = 'coupon'
</services>

//gift services 注册的类
<service id="b2c_cart_object_apps">
    <class>gift_cart_object_gift</class>
</service>

b2c_cart_object_goods:获取到的是购物车中的商品数据

b2c_cart_object_coupon:获取到的是购物车中优惠劵的数据

gift_cart_object_gift:获取到的是购物车中赠品的数据

$aResult['object'][$type_name] = $object->getAll(true);

通过b2c_cart_object_goods,b2c_cart_object_coupon,gfit_cart_object_gift三个类获取到商品数据用

//统计
$this->app->model('cart')->count_objects($aResult);
b2c_cart_object_goods
public function getAll($rich = false) {

getAll方法调用了model/cart/objects.php中的getlist方法来获取购物车中的数据

已登录会员
    先在kvstore中对数据进行获取,如果没有获取到则在sdb_b2c_cart_objects表中获取的数据

未登陆会员
    对应未登陆会员因为不会把购物车的数据存数据库而是把数据存放在session中的
    所以未登录用户直接从session中把购物车中的数据获取到

getlist方法获取的购物车中的数据结构如下:

Array
(
    [0] => Array
        (
            [obj_ident] => goods_68_505
            [member_ident] => ec3eff9a942294e8a178a08696209a50 //当前用户的唯一表示session_id
            [obj_type] => goods   //类型(goods,coupon )
            [quantity] => 1       //购买数量
            [params] => Array
                (
                    [goods_id] => 68      //购买的商品ID
                    [product_id] => 505   //购买的货品ID
                    [adjunct] => Array   //配件数据信息
                        (
                            [0] => Array
                                (
                                    [group_id] => 0
                                    [adjunct] => Array
                                        (
                                            [547] => 1
                                        )

                                )

                        )

                    [extends_params] =>
                )

            [member_id] => -1  //-1 表示该用户未登录
            [time] => 1328178598
        )
)

在这获取到的数据是比较简单一些信息,getAll方法中再调用了_get方法把购物车商品详细数据信息进行加载 _get方法,获取到购物车中信息的商品数据 _get_basic

1. 在_get_basic方法中会把当前购物车中的货品ID提取出来,如果当前商品有配件那么页会把配件的
  货品ID提取出来
2. 在原有的购物车数据中增加配件信息(配件的对大购买量等)
3. 会对当前购物车中的数据进行一些合法性检查(商品的上下架,库存,货品的上下架等)

_get_products

1 获取会员折扣,整理数据,将购物车中的未上架的商品在购物车中删除掉

2 根据货品ID获取得到对于货品的详细信息,并将其加载到购物车数据中

_check_goods

判断商品是否上架,是否有库存

_check_products

判断货品是否上架,是否有库存

get_products_real_store

获取购物车每个商品的库存

#####b2c_cart_object_coupon 获取购物车中的优惠劵

获取购物车优惠劵信息首先也是调用b2c_cart_object_coupon中的getALl方法来进行获取
这个和b2c_cart_object_goods类似
gift_cart_object_gift

获取到购物车的赠品数据

获取购物车中的赠品的数据是表示用会员积分兑换的赠品,它是一个购买单元。
gift_cart_object_gift的作用就是获取购物车中赠品的详细信息,和b2c_cart_object_goods类似
b2c_cart_process_profilter

调用的是process方法,在process方法中调用b2c_cart_prefilter_apps services注册类中的filter

方法来加载商品促销数据,加载完成后进行统计

 <service id="b2c_cart_prefilter_apps">
    <class>b2c_cart_prefilter_promotion_goods</class>
</service>
b2c_cart_prefilter_promotion_goods

商品促销预过滤

filter

filter作用:
1. services b2c_promotion_use_check
    object对应的方法 check_use_promotion
    参数:goods_id
    作用:用来验证当前购买商品是否可以参加商品促销
    目前状态:预留services
2. 当前类中的 _init_rule方法
    参数:goods_id,current_time=time()
    作用:sdb_b2c_goods_promotion_ref表和sdb_b2c_sales_rule_goods表中的到
          购买商品满足商品促销的规则
3. 当前类中的 _filter 方法
    作用:将满足商品促销的促销规则是执行优惠方案
b2c_cart_process_postfilter

调用的是process方法,在process方法中调用b2c_cart_postfilter_apps services注册类中的filter

方法来加载商品促销数据,加载完成后进行统计

 <service id="b2c_cart_postfilter_apps">
    <class>b2c_cart_postfilter_promotion</class>
</service>
b2c_cart_postfilter_promotion

订单促销加载,优惠劵促销加载

评论

评论正在提交中...请稍后
评论提交成功...
  1. #1

    (2018-07-25 13:23:38) 沙发
    无法加入购物车,不晓得哪里出了问题?求解~

  2. #2

    Suvan (2018-08-14 14:42:24) 板凳
    这个跟跟代码就好了,不是什么疑难杂症···