一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

DEDECMS|帝國CMS|Discuz|PHPCMS|Wordpress|ZBLOG|ECSHOP|蘋果CMS|極致CMS|CMS系統|

服務器之家 - 建站程序 - ECSHOP - ecshop二次開發之購物車分析

ecshop二次開發之購物車分析

2019-10-09 16:00ecshop開發網 ECSHOP

這篇文章主要為大家介紹了ecshop二次開發中購物車數據的存儲與讀寫,以實例形式詳細描述了針對購物車數據的保存方法及讀寫方法的修改技巧,具有一定的參考借鑒價值,需要的朋友可以參考下

本文實例講述了ecshop二次開發之購物車分析。分享給大家供大家參考。具體分析如下:

一、保存用戶購物車數據

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_update_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, // 本店售價合計(無格式)
);</p> <p>$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_update_cart($arr)    
 

復制代碼

代碼如下:

function flow_update_cart($arr)
{
foreach ($arr AS $key => $val)
{
$val = intval(make_semiangle($val));
if ($val <= 0)
{
continue;
}</p> <p> $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']."')";</p> <p> $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_update_cart($a);}


第三項自己琢磨吧,懶得去翻那代碼了,改掉SQL語句中session_id部分為user_id就行了

 

希望本文所述對大家的ecshop二次開發有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91短视频版高清在线观看免费 | 毛片免费的 | 国内精品哆啪啪 | 91色在线观看国产 | 小小水蜜桃免费影院 | 久草热8精品视频在线观看 久草草在线视视频 | xxxxx性欧美| 免费观看视频高清在线 | 精品日韩欧美一区二区三区在线播放 | 国产精品美女福利视频免费专区 | 精品午夜视频 | 亚洲精品国产一区二区第一页 | 日本精品久久久久中文字幕 1 | 精品蜜臀AV在线天堂 | 亚洲国产在线视频精品 | 欧美性videossex丝袜 | 秋霞色 | 亚洲国产婷婷俺也色综合 | 精品视频在线免费播放 | 青草久久伊人 | 亚洲国产一区二区三区a毛片 | 亚州精品视频 | 成人激情| 国产精品成人一区二区1 | 九九热视频免费观看 | 国内自拍2020 | 美女草b | 韩国情事伦理片观看地址 | 亚洲欧洲日产国码无码av | 91国内精品久久久久怡红院 | 热久久99精品这里有精品 | 国产高清免费在线 | 欧美日韩中文字幕一区二区高清 | ass性强迫rape | 2020年精品国产午夜福利在线 | 四神集团1涨奶是第几章 | 日本人妖视频 | 小小水蜜桃视频高清在线观看免费 | 午夜AV亚洲一码二中文字幕青青 | 国产国语在线播放视频 | 欧美日韩人成在线观看 |