各位可根据自己需要改一下,最大的特点是只用了一个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 } ?> By phpfans.net收集整理 |