ECSHOP - 二次开辟指南---购物车篇
添加时间:2013-7-22 点击量:
第一个题目 保存用户购物车数据ECSHOP的购物车数据,是以Session 体式格式存储在数据库里,并在Session停止后 ,Distroy 掉,解决办法是:
1.购物车内容读取体式格式. 更改登岸后购物车获取前提 Session 零丁体式格式为 Session +用户名 ,该批改位于Lib_order 下 function get_cart_goods();
2. 购物车内容记录体式格式,未登岸体式格式依然是Session , 用户登岸后,主动UPdate Cart 一次,将同一UserID下购物车内数据不是当前Session的Update到当前Session , 并将当前Session 下UserID为0的项目组(未登岸景象下,Userid是0),UpdateID到当前UserID ,该批改位于 Flow.php 下面function flow__cart(¥arr)
3.更改退出时,主动Clear Cart的项目组,将Distroy 当前Session 的内容,更改为Distroy 当前Session 下 User ID为0的项目组。 该批改位于:Includes/cls_session.php , function destroy_session() 项目组申明:这种景象下就是旅客封闭浏览器后,购物车清空, 注册用户购物车永远保存, 可能会对办事器造成稍微压力,首要取决于用户的数量,若是数量较多半据办事器压力较大,可以经由过程法度,主动清理跨越一按时候段未登岸的User Cart (或者是额外增长一个数据,来标示参加购物车的时候,按照此时候断定是否自动清理).
1.购物车内容读取体式格式.
更改登岸后购物车获取前提 Session 零丁体式格式为 Session +用户名 ,该批改位于Lib_order 下 function get_cart_goods();具体更改代码项目组:
function get_cart_goods(){
/ 初始化 /
¥goods_list = array();
¥total = array(
goods_price => 0, // 本店售价合计(有格局)
market_price => 0, // 市场售价合计(有格局)
saving => 0, // 节俭金额(有格局)
save_rate => 0, // 节俭百分比
goods_amount => 0, // 本店售价合计(无格局));
/ 轮回、统计 /
¥uid=¥_SESSION[user_id];
if(¥uid==0){
¥sql = SELECT , IF(parent_id, parent_id, goods_id) AS pid .
FROM . ¥GLOBALS[ecs]->table
(cart) . . WHERE session_id = . SESS_ID . AND rec_type = . CART_GENERAL_GOODS . .
ORDER BY pid, parent_id;}else{¥sql = SELECT , IF(parent_id, parent_id, goods_id) AS pid .
FROM . ¥GLOBALS[ecs]->table(cart) . .
WHERE (user_id=.¥uid. OR session_id = . SESS_ID . ) AND rec_type = . CART_GENERAL_GOODS . . ORDER BY pid, parent_id;}¥res = ¥GLOBALS[db]->query(¥sql);
........后面不变
2. 购物车内容记录体式格式,未登岸体式格式依然是Session , 用户登岸后,主动UPdate Cart 一次,将同一UserID下购物车内数据不是当前Session的Update到当前Session , 并将当前Session 下UserID为0的项目组(未登岸景象下,Userid是0),UpdateID到当前UserID ,该批改位于 Flow.php
下面function flow__cart(¥arr)
function flow__cart(¥arr)
{foreach (¥arr AS ¥key => ¥val){
¥val = intval(make_semiangle(¥val));
if (¥val <= 0)
{
continue;
}
¥sql = SELECT `rec_id`, `goods_id`, `goods_attr_id`, `extension_code` FROM .¥GLOBALS[ecs]->table(cart).
WHERE rec_id=¥key AND (session_id= . SESS_ID . OR user_id=.¥_SESSION[user_id].);
¥goods = ¥GLOBALS[db]->getRow(¥sql);// 更新购物车Session & user id
¥sql =UPDATE .¥GLOBALS[ecs]->table(cart). SET session_id= . SESS_ID . ,user_id=.¥_SESSION[user_id]. where rec_id=.¥goods[rec_id].;
¥g = ¥GLOBALS[db]->query(¥sql);
¥sql = SELECT g.goods_name, g.goods_number .
FROM .¥GLOBALS[ecs]->table(goods). AS g, .
¥GLOBALS[ecs]->table(cart). AS c .
WHERE g.goods_id = c.goods_id AND c.rec_id = ¥key;
...........................后面不变
在用户登岸后,Flow.php打开购物车处所,须要调用一次主动更新购物车,在
/ 取得商品列表,策画合计 /
¥cart_goods = get_cart_goods();
之后增长如下代码for(
¥i=0;
¥i<count(¥cart_goods[goods_list]);
¥i++){¥a[¥cart_goods[goods_list][¥i][rec_id]]=¥cart_goods[goods_list][0][goods_number];}if(count(¥a)>0){flow__cart(¥a);}
第三项本身揣摩吧,懒得去翻那代码了,改掉SQL语句中session_id项目组为user_id就行了这里发帖真麻烦地说,两套验证...
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永