当点击进入购物车的时候进入控制器cart.php中的index方法,调用_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方法是通过注册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类中主要是把购物车的数据进行组织,并不包含促销等处理
通过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);
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方法把购物车商品详细数据信息进行加载
1 在_get_basic方法中会把当前购物车中的货品ID提取出来,如果当前商品有配件那么页会把配件的 货品ID提取出来 2 在原有的购物车数据中增加配件信息(配件的对大购买量等) 3 会对当前购物车中的数据进行一些合法性检查(商品的上下架,库存,货品的上下架等)
1 获取会员折扣,整理数据,将购物车中的未上架的商品在购物车中删除掉 2 根据货品ID获取得到对于货品的详细信息,并将其加载到购物车数据中
判断商品是否上架,是否有库存
判断货品是否上架,是否有库存
获取购物车每个商品的库存
获取购物车中的优惠劵
获取购物车优惠劵信息首先也是调用b2c_cart_object_coupon中的getALl方法来进行获取 这个和b2c_cart_object_goods类似
获取到购物车的赠品数据
获取购物车中的赠品的数据是表示用会员积分兑换的赠品,它是一个购买单元。 gift_cart_object_gift的作用就是获取购物车中赠品的详细信息,和b2c_cart_object_goods类似
调用的是process方法,在process方法中调用b2c_cart_prefilter_apps services注册类中的filter
方法来加载商品促销数据,加载完成后进行统计
<service id="b2c_cart_prefilter_apps"> <class>b2c_cart_prefilter_promotion_goods</class> </service>
商品促销预过滤
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 方法 作用:将满足商品促销的促销规则是执行优惠方案
调用的是process方法,在process方法中调用b2c_cart_postfilter_apps services注册类中的filter
方法来加载商品促销数据,加载完成后进行统计
<service id="b2c_cart_postfilter_apps"> <class>b2c_cart_postfilter_promotion</class> </service>
订单促销加载,优惠劵促销加载