ECSHOP程序的購物車會(huì)自動(dòng)清空,而且有多個(gè)清空設(shè)置,防不勝防:
1、當(dāng)用戶的IP變化后,購物車自動(dòng)清空;
2、當(dāng)瀏覽器關(guān)閉后,購物車自動(dòng)清空;
3、當(dāng)用戶退出登陸后,購物車自動(dòng)清空;
4、管理員在后臺(tái)登陸后,購物車自動(dòng)清空。
幾乎可以說,不管是不是會(huì)員、不管有沒有登陸,購物車的數(shù)據(jù)是不保留的,甚至管理員登陸后臺(tái)都會(huì)把購物車清空一次,似乎ECSHOP對(duì)購物車有刻骨之仇,分分
鐘要把購物車的數(shù)據(jù)清理掉。這給會(huì)員的體驗(yàn)就很差。很多會(huì)員反映:花了一下午時(shí)間挑好商品,準(zhǔn)備第二天再下單,結(jié)果第二天一看,購物車?yán)锸裁匆矝]有了。
想保留會(huì)員的購物車,需要修改程序。網(wǎng)絡(luò)上給出了很多種修改方案,但都不全面,購物車依然會(huì)被清空。只有把程序中所有清空代碼都修改掉,才起作用。
1、限制購物車僅登陸后使用,以免未登陸使用購物車后數(shù)據(jù)被清空。
flow.php 找到" B% F1 r) s% u5 d. H' P5 q
if ($_REQUEST['step'] == 'add_to_cart')
{
include_once('includes/cls_json.php');
在下面添加
$ Q1 d8 }1 w0 |: G& R% L
if ( empty($_SESSION['user_name']))
{
$json = new JSON;
$result['error'] ?= "999";
$result['message'] = "請(qǐng)先登錄";
die($json->encode($result));
}
2、不自動(dòng)清空會(huì)員的購物車
關(guān)閉瀏覽器時(shí),用戶信息會(huì)更新,購物車被清空。退出登陸更是清空。我們修改為只清空游客的購物車,會(huì)員的不清空。(網(wǎng)絡(luò)上這一步有幾個(gè)版本的代碼,都搞得
很復(fù)雜,說還要把lib.main.php里面加入多少代碼來"更新購物車",那是不需要的。因?yàn)橘徫镘囆畔⒈緛砭鸵褜懭霐?shù)據(jù)庫了,此地只是阻止清空就行
了。而且有些更新購物車的代碼是錯(cuò)誤的,真的添加上去后,購物車會(huì)出錯(cuò),比如同一個(gè)商品有多個(gè)顏 時(shí),只能買一種顏 。想買兩個(gè)顏 就搞不成。所以不要畫
蛇添足去搞什么"更新購物車")。
includes/cls_session.php找到destroy_session()函數(shù),把其中
/* ECSHOP 自定義執(zhí)行部分*/
if (!empty($GLOBALS['ecs']))
{
$this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id' ");
}
替換為
/* ECSHOP 自定義執(zhí)行部分(不清空會(huì)員的購物車) */
if (!empty($GLOBALS['ecs']))
{
$this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id' AND user_id = '' ");
}
3、換IP時(shí)不影響購物車
將用戶的IP存入Cookie,或者在生成SESSION時(shí),不取IP。這步修改對(duì)動(dòng)態(tài)IP用戶無法使用購物車也同時(shí)解決。這里IP存入Cookie
的有效期是10天,也就是10后購物車依然被清空了。如果想保留更久或更短,可以把864000改為其它數(shù)字。一般來說購物車數(shù)據(jù)留10天已足夠了,10
天了還未下單,基本上就不會(huì)下單了。而10后購物車清空,不會(huì)造成數(shù)據(jù)庫壓力。
includes/cls_session.php把
$this->_ip = real_ip();
替換為
if(isset($_COOKIE['real_ipd']) && !empty($_COOKIE['real_ipd']))
{
$this->_ip = $_COOKIE['real_ipd'];
}
else
{
$this->_ip = real_ip();
setcookie("real_ipd", $this->_ip, time()+864000, $this->session_cookie_path);
}
4、管理員登陸時(shí)不清空購物車
特別不能理解管理員登陸后臺(tái),居然把全站的購物車都清空。難道管理員成了清潔工?若干會(huì)員在前臺(tái)選購,選著選著你管理員要進(jìn)后臺(tái)看一下,你一進(jìn)去,前臺(tái)會(huì)員的購物車全空了、全下不成單了--這都什么事兒??!也不知道是哪個(gè)腦殘?jiān)O(shè)計(jì)的這么一個(gè)步驟。
找admin/privilege.php,以下代碼注解掉
// 清除購物車中過期的數(shù)據(jù)
clear_cart();
再找
// 刪除cart中無效的數(shù)據(jù)
$sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') .
" WHERE session_id NOT " . db_create_in($valid_sess);
$GLOBALS['db']->query($sql);
也注解掉。
( a& p1 r# f6 A, D/ e; h* Y
以前購物車天天自動(dòng)清空,數(shù)據(jù)表老是空的或者才幾條數(shù)據(jù)。購物車不再自動(dòng)清空后,數(shù)據(jù)表的數(shù)據(jù)就會(huì)慢慢累積。 r9 w0 @, `; q