购物车讲解

在网上泡了一天,还是不找不到好的购物车.
就看到很多地方都在说这个类,但是有没有真的使用过这个类呢?
到现在还没有找到这个类的使用方法.只知道这个类在PHP4.3会出错.

[复制到剪切板]
CODE:
[php]
<?
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 
$this->totalCost ;
$this->myCart = array() ;
session_start(); //初始化一个session 
if(session_is_registered("myCart")==falsesession_register('myCart'); 
$this->update(); 
// $this->Calculate(); 



//********私有,根据session的值更新类中相应数据 
function update(){ 
session_start(); //初始化一个session 
$myCart $_SESSION["myCart"] ;
if(
false==$myCart)
{
$this->sortCount ;
$this->totalCost ;
$this->myCart = array() ;
return 
false;
}
//得到商品的总数量
$this->sortCount=count($myCart); 
if(
$this->sortCount>0)
{
//开始计算商品的金额
$totalCost ;
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($sValue2) ;
}
}
}
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 >$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:

[复制到剪切板]
CODE:
<?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"truetrue); 
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();
?>
[/
php] ;