xiaocon
(xiaocon)
高级会员

版主
UID 4864
精华
4
积分 999
帖子 939
金钱 959 喜悦币
威望 40
人脉 0
阅读权限 50
注册 2000-11-22
状态 离线
|
[推荐阅读] 精华区的帖子少了很多啊!!
QUOTE: 最初由 yhlong 发布
[B]:blowzy: [/B] 贴个购物车的类,最大的特点是只用了一个Session
各位可根据自己需要改一下,最大的特点是只用了一个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 }
?>
这是我当时写的一个列出所有购物车中的清单的程序,各位可自己根据需要改写一下 <?php ob_start(); session_start() ; /* $s=array("id" => 6, "name" => "测试a", "price" => "6", "count" =>3); $t=array("id" => 7, "name" => "测试b", "price" => "7", "count" =>15); $u=array("id" => 8, "name" => "测试c", "price" => "8", "count" =>21); $rst=array($s, $t, $u);
*/ require_once("HTML/IT.php"); $tpl = new HTML_Template_IT("./"); //读取模板文件 $tpl->setRoot("./"); $tpl->loadTemplatefile("listcart.html", true, true); require_once "../classes/cart.php" ; $cart = new cart ; // $cart->addData($rst); $i=count($_POST[lines]) ; if($_POST["emptyAll"]==true) { //如果清空条件为真 $cart->emptyAll() ; }else{ //如果用户提交更新 if( $i > 0) { //如果提交过来的数据大于一个商品 $addData = $_POST[lines] ; foreach($addData as $key=>$val) { if($val["del"]==true) { $cart->emptyOne($key) ; unset($addData[$key]) ; } } $cart->addData($addData) ; } } $dat = $cart->getData(); if(count($dat) > 0) { foreach($dat as $key=>$val) { $tpl->setCurrentBlock("lines") ; // $tpl->setVariable($lan) ; $tpl->setVariable("id", $key) ; $tpl->setVariable("i" , $key) ; $tpl->setVariable("totalCount" , $cart->getSortCount()) ; $tpl->setVariable("totalMoney" , $cart->getTotalCost()) ; $tpl->setVariable($val) ; $tpl->parseCurrentBlock("lines") ; } } //替换模板页面中的标记 $tpl->setCurrentBlock("page") ; if($key==false)$key=0; $tpl->setVariable("i" , $key) ; $tpl->setVariable("mytitle", "我的购物篮") ; // $tpl->setVariable($language->getLanUrl()) ; $tpl->parseCurrentBlock("page") ;
//显示页面 $tpl->show();
ob_end_flush(); ?>
|
|