频道直达 - 专题 - 新闻 - 基础 - 高级 - 安装 - 技巧 - 数据库 - 手册 - PHP - Linux - Java - MySQL - Apache - 麻辣堂 - 狼盟 - Rails社群 - 搜索 - 下载 - 开源 - 论坛
PHP开发资源网 主页>>高级应用>> 收藏此文 | 收藏本站 | 设为首页

贴个购物车的类,只用了一个Session

来源:www.phpres.com 作者:Angelover 出处:www.phpres.com 2007-8-6 19:19:15 进入讨论组
关 键 词: 一个 购物车 myCart // 商品 id data price count if

各位可根据自己需要改一下,最大的特点是只用了一个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开发资源论坛讨论。
收藏此文】【 】【打印】【关闭
相关文章
图文推荐
论 坛 资 源
PHP开发资源网奋斗目标
阅读排行:
热门技术文档
最新图文档
本站编辑推荐:(本站开通Delphi4PHP专区,欢迎进入论坛交流!)
编缉最近更新文章
网站赞助商
搜索您感兴趣的内容
 
   网站首页 -  网站地图 -  网站合作 -  手册中心 -  通用网址 -  网站论坛 -  网站投稿 -  友情链接 -  帮助中心
版权所有:PHP开发资源网 © 2003-2008 通用网址:PHP资源网 合作媒体: 赛迪网IT技术
互联网违法和不良信息举报中心 | 不良信息举报信箱