各位可根據自己需要改一下,最大的特點是只用了一個Session,有的地方是用了以前網上的一個購物車的類改寫的,我也沒有好好地整理過 <?php class cart {
var $sortCount; //商品種類數 var $totalCost; //商品總金額 /* 所有的商品,如:$myCart[5][$name]:商品編號為5的名稱 * $myCart[5][$price]:商品編號為5的單價 * $myCart[5][$count]:商品編號為5的數量 * $myCart[5][$cost]:商品編號為5的合計金額 */ var $myCart; var $Id;//每類商品的ID(數組) var $Name;//每類商品的名稱(數組) var $Price;//每類商品的價格(數組) var $Count;//每類商品的件數(數組) var $Cost;//每類商品的價值(數組)
//******構造函數 function cart(){ $this->sortCount = 0; $this->totalCost = 0; $this->myCart= array(); session_start();//初始化一個session if(session_is_registered("myCart")==false)session_register('myCart'); $this->update(); //$this->Calculate(); } //********私有,根據session的值更新類中相應數據 function update(){ session_start();//初始化一個session $myCart = $_SESSION["myCart"]; if(false==$myCart) { $this->sortCount = 0; $this->totalCost = 0; $this->myCart = array(); return false; } //得到商品的總數量 $this->sortCount=count($myCart); if($this->sortCount>0) { //開始計算商品的金額 $totalCost = 0; foreach($myCart as $key=>$val) { //先四舍五入 foreach($val as $proName=>$proVal) { if($proName !="name") { $val[$proName] = round(eregi_replace(",", "",$proVal),2); $myCart[$key][$proName] = $val[$proName]; } }
//計算每件商品的金額 $myCart[$key]["cost"] = round($val["count"]*$val["price"], 2); //得到所有商品的金額 $totalCost += $myCart[$key]["cost"]; } $this->totalCost = $totalCost; $this->myCart = $myCart; $_SESSION["myCart"] = $myCart;
} } /** * 格式化數字為貨幣數據 * * **/ function formatNum($data) { foreach($data as $key=>$val) { foreach($val as $sName=>$sValue) { if($sName !="name") { $data[$key][$sName] = number_format($sValue, 2); } } } return $data;
} //**************以下為接口函數 //*** 加一件商品 // 判斷是否藍中已有,如有,加count,否則加一個新商品 //首先都是改session的值,然后再調用update() and calculate()來更新成員變量 function addOne($id,$na,$pr) { session_start();//初始化一個session $myCart = $_SESSION["myCart"]; //設置購物車中的數量 $myCart[$id]["name"]= $na; $myCart[$id]["price"] = $pr; ++$myCart[$id]["count"]; $_SESSION["myCart"] = $myCart; //更新一下類的成員數據 $this->update();
} /** * 向購物車中添加一組商品,如果沒有,進行添加,如果已經存在,則更新為data * @param $data- 要添加的商品,格式為: * $data[0][id], $data[0][name], * $data[0][price],$data[0][count] * @return boolean */ function addData($data) { if(count($data > 0)) { session_start();//初始化一個session $myCart = $_SESSION["myCart"]; foreach($data as $val) { extract($val); //設置購物車中的數量 $myCart[$id]["name"]= $name; $myCart[$id]["price"] = $price; $myCart[$id]["count"] = $count; } $_SESSION["myCart"] = $myCart; //更新一下類的成員數據 $this->update(); } } /* * 更改一件商品的單價 * * * **/ function updatePrice($id, $price) { if($price <=0)return false; session_start();//初始化一個session $myCart = $_SESSION["myCart"]; if($myCart[$id]==true) { $myCart[$id]["price"]=$price;
$_SESSION["myCart"] = $myCart; $this->update(); } } //將一件商品的數量減1 function removeOne($id) { $count = $this->myCart[$id]["count"]; if($count>0) { $this->modifyCount($id, --$count); } } //改變商品的個數,如果傳入單價,則一起更改單價 function modifyCount($id, $ncount, $price=0) { if($ncount <= 0) return false; session_start();//初始化一個session $myCart = $_SESSION["myCart"]; if($myCart[$id]==true) { $myCart[$id]["count"]=$ncount; //如果有傳入單價,則一起更改單價 if($price >0 ) $myCart[$id]["price"]=$price;
$_SESSION["myCart"] = $myCart; $this->update(); } } //清空一種商品 function emptyOne($i) { session_start();//初始化一個session $myCart = $_SESSION["myCart"]; unset($myCart[$i]); if(count($myCart)==0) { $this->emptyAll(); }else{ $_SESSION["myCart"] = $myCart; $this->update(); } } /*************************** 清空所有的商品 因為在win里PHP不支持session_destroy()函數,所以這個清空函數不完善, 只是把每種商品的個數置為0。 如果是在linux下,可以直接用session_destroy()來做。 *****************************/ function emptyAll() { session_start();//初始化一個session $myCart = $_SESSION["myCart"];
unset($myCart); $_SESSION["myCart"] = $myCart; $this->update(); } /** *返回所有購物車中的數據 * **/ function getData() { if($this->sortCount > 0) { return $this->myCart; }else{ return array(); } } //取一件商品的信息,主要的工作函數 //返回一個關聯數組,下標分別對應 id,name,price,count,cost function getOne($i){ $data = $this->myCart[$i]; if(false==$data) return array();
$data["id"]=$i; return $data;
} //取總的商品種類數 function getSortCount(){ return $this->sortCount; } //取總的商品價值 function getTotalCost(){ return $this->totalCost; } //end class }
?>
|