王朝网络
分享
 
 
 

新版购物车类,加入查找功能以及完善错误处理功能

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

<?php

//购物车类

//支持自定义列名及列数

// 作者:天地小子 twt326@163.com

//Create Time: 2004-10

//转载或修改请保留原版权,谢谢

//Last Modify Time : 2005-1-12 加入查找功能和出错处理

/*--------------------------使用手册----------------------------

本购物车支持自定义物品属性(即列)和设置 标识关键字、金额关键字、数量关键字,依此自动计算金额

及金额小计。功能:增加商品、修改商品数量、修改商品单价、商品加1、商品减1、删除商品、商品查找

本类中关于商品加1、减1、删除时没有做商品是否存在的判断,因为出错也不会影响购物车的使用,如果

你需要的话可能加入判断语句。

1.类的初始化

$thiscart=new twt_Cart;

//设置购物车商品属性或者说设置自定义列,列名将作为读取商品信息时的数组下标

//这里以 ID 品名,数量,金额为例

$spfield=array("id","name","num","gold");

$thiscart->setfield($spfield);

//设置购物车关键字,用于自动金额计算,及查找商品初始化

//本例设置为: 关键字 id 数量列: num 金额列: gold

$thiscart->setkey("id","num","gold");

//-----------------类方法

//增加商品 本例为增加 2个单价为1.5元的苹果 如果购物车内已经有ID为1的商品则作数量增加处理

$sp=array(1,"苹果",2,1.5);

$thiscart->addone($sp);

//删除一件商品 本例为删除购物车中序号为 2 的商品 序号从0开始,为类cart属性的第一个下标,以下皆同

$thiscart->delone(2);

//某商品加1 本例为商品序号为 2 的商品数量加1

$thiscart->add1(2);

//某商品减1 商品数量低于2件则不作减操作并返回警告信息 本例为商品序号为 2 的商品数量减1

$thiscart->del1(2);

//修改某件商品数量 本例为将商品序号为2的商品数量改为5

$thiscart->modifyone(2,5);

//修改某件商品单价 本例为将商品序号为2的商品单价改为 12.5 元

$thiscart->modifyprice(2,12.5);

//商品查找,例1 是单关键字查找,例2 是以多关键字查找,查找结果将返回为下标起始值为0,值为商品

//在购物车内的序号 的数组,未查找到符合条件的将返回空数组。

例1:

$sel=$thiscart->find("苹果","name");

$sel=$thiscart->find(2);//本句是查找关键字值为2的商品 省略第二个参数将自动匹配 setkey方法所设置的关键列

例2:

$scontent=array("苹果",12.5);

$skey=array("name","gold");

$sel=$thiscart->find($scontent,$skey);//本例将查找名称为苹果,价格为12.5的产品序号

//清空购物车

$thiscart->clear();

//重置错误信息

$thiscart->clearerr();

//----------------------类属性

//商品种数

$thiscart->sp_count;

//商品总金额

$thiscart->sp_sumgold;

//商品属性数组(自定义列名,设计时用)

$thiscart->fields;

//商品属性个数(自定义列数,设计时用)

$thiscart->f_num;

//判断重复关键字(自定义,设计时用)

$thiscart->f_key;

//金额关键字(列名,设计时用)

$thiscart->f_goldkey;

//数量关键字(列名,设计时用)

$thiscart->f_numkey;

//错误信息

$thiscart->errmessage;//中果招行退回值 为 FALSE,则此属性中存储出错情况信息

//商品信息数组 此属性为二维数组,第一维为商品序号,第二维为自定义列名

$thiscart->cart[$xh][$fieldname];

//如 获得序号为2的商品的品名则:

$spname=$thiscart->cart[2]["name"];

-----------------------------------------------------------------*/

class twt_Cart

{

//类属性*************************************************************

var $sp_count;//商品类数

var $sp_sumgold;//商品总金额

var $fields;//自定义列

var $f_num;//自定义列数

var $f_key;//作为判断商品是否重复的关键字

var $f_goldkey;//商品金额字段名 用于商品统计信息计算时用

var $f_numkey;//商品数量字段名 用于商品统计信息计算时用

var $errmessage;//出错信息

var $cart;

//构造函数

function twt_Cart()

{

//从SESSION中读出一些必须参数

//session_start();

if (! session_is_registered("mycart")) session_register("mycart");

$mycart=$_SESSION["mycart"];

$this->sp_count=count($mycart);

if (! session_is_registered("mc_fields")) session_register("mc_fields");

$this->fields=$_SESSION["mc_fields"];

$this->f_num=count($this->fields)-1;

if (! session_is_registered("mc_key")) session_register("mc_key");

$this->f_key=$_SESSION["mc_key"];

if (! session_is_registered("mc_goldkey")) session_register("mc_goldkey");

$this->f_goldkey=$_SESSION["mc_goldkey"];

if (! session_is_registered("mc_numkey")) session_register("mc_numkey");

$this->f_numkey=$_SESSION["mc_numkey"];

$this->cart=$mycart;

$this->errmessage="";

$this->updatecart();

}

//类方法***************************************************************

//更新总金额

function updatecart()

{

//session_start();

if (! session_is_registered("mycart"))

{$this->errmessage="SESSION初始化错误!";

return false;}

$mycart=$_SESSION["mycart"];

$tmp=0;

for ($i=0;$i<$this->sp_count;$i++)

$tmp+=$mycart[$i][$this->f_goldkey]*$mycart[$i][$this->f_numkey];

$this->sp_sumgold=$tmp;

}

//设置自定义字段及初始化类 参数为数组,下标以0开头

function setfield($tfield)

{

if (is_array($tfield))

{

$this->fields=$tfield;

//初始化一些值

$this->f_num=count($tfield)-1;

$this->f_key=$tfield[0];

$this->f_goldkey=$tfield[0];

$this->f_numkey=$tfield[0];

//session_start();

$_SESSION["mc_fields"]=$tfield;

$_SESSION["mc_key"]=$tfield[0];

$_SESSION["mc_goldkey"]=$tfield[0];

$_SESSION["mc_numkey"]=$tfield[0];

}

else

{$this->errmessage="参数传输错误,请传入从0开始下标的数组!";

return false;}

}//setfield end

//设置关键字 (唯一关键字,如ID,数量列名称,金额列名称)

function setkey($key,$numkey,$goldkey)

{

$this->f_key=$key;

$this->f_goldkey=$goldkey;

$this->f_numkey=$numkey;

//session_start();

$_SESSION["mc_key"]=$key;

$_SESSION["mc_goldkey"]=$goldkey;

$_SESSION["mc_numkey"]=$numkey;

}

//清除错误信息

function clearerr()

{

$this->errmessage="";

}

//清除购物篮

function clear()

{

$mycart=$_SESSION["mycart"];

unset ($mycart);

$_SESSION["mycart"]=$mycart;

session_unregister("mycart");

session_unregister("mc_fields");

session_unregister("mc_key");

session_unregister("mc_goldkey");

session_unregister("mc_numkey");

$this->cart=$mycart;

$this->sp_count=0;

$this->sp_sumgold=0;

}

//功能方法/////////////////////////////////////////////////////////

/*查找某件商品,给出 查找内容或内容数组 查找字段名或字段名数组 返回商品序号数组 找不到返回FALSE

黙认查找关键列 如果给的参数是数组,那么内容数组和字段名组必须对应,且数量相等

*/

function find($sstr,$sfield="0")

{

//session_start();

$skey=array();

$sfstr=array();

$mycart=$_SESSION["mycart"];

//统一参数

if (is_array($sstr))

{

if (! is_array($sfield))

{

$this->errmessage="参数类型不一致!";

return false;

}

$skey=$sfield;

$sfstr=$sstr;

}

else

{

if (is_array($sfield))

{

$this->errmessage="参数类型不一致!";

return false;

}

if ($sfield=="0")

$skey[0]=$this->f_key;

else

$skey[0]=$sfield;

$sfstr[0]=$sstr;

}

$rtarray=array();

//查找

$cnt=0;

for ($i=0;$i<$this->sp_count;$i++)

{$tflag=true;

//数组关键字及内容对应查找

for ($j=0;$j<count($skey);$j++)

if ($mycart[$i][$skey[$j]] != $sfstr[$j]) $tflag=false;

if ($tflag)

$rtarray[$cnt++]=$i;

}

return $rtarray;

}

//添加商品 数组参数,以自定义的字段名为下标

function addone($splist)

{

if ((! is_array($splist)) || ((count($splist)-1) != $this->f_num))

{$this->errmessage="参数传输错误,请传入以自定义字段名为下标且元数个数吻合的数组!";

return false;}

//session_start();

$mycart=$_SESSION["mycart"];

//判断商品是否已经存在,如果存在,则加上

$tflag=true;

for ($i=0;$i<$this->sp_count;$i++)

{ if ($mycart[$i][$this->f_key]==$splist[$this->f_key])

{ $tflag=false;

//增加商品个数

$mycart[$i][$this->f_numkey]+=$splist[$this->f_numkey];

$i=$this->sp_count;

}

}

//添加商品到列表中

if ($tflag)

{ for ($i=0;$i<=$this->f_num;$i++)

$mycart[$this->sp_count][$this->fields[$i]]=$splist[$this->fields[$i]];

$this->sp_count+=1;

}

$this->cart=$mycart;

$_SESSION["mycart"]=$mycart;

$this->updatecart();

}//add end

//删除一个商品 参数为商品在购物车内的序号

function delone($id)

{ //session_start();

$mycart = $_SESSION["mycart"] ;

for ($i=$id;$i<$this->sp_count-1;$i++)

{ for ($j=0;$j<=$this->f_num;$j++)

$mycart[$i][$this->fields[$j]]=$mycart[$i+1][$this->fields[$j]];

}

unset( $mycart[$this->sp_count-1] ) ;

$this->sp_count-=1;

$_SESSION["mycart"] = $mycart ;

$this->cart=$mycart;

$this->updatecart();

}//del end

//修改一件商品的数量 参数为 商品在购物车内的序号 需要改变的数量

function modifyone($id,$num)

{

//session_start();

$mycart = $_SESSION["mycart"] ;

if (! empty($mycart[$id][$this->f_key]))

{ if ($num>0)

{ $mycart[$id][$this->f_numkey]=$num;

$this->cart=$mycart;

$_SESSION["mycart"]=$mycart;

$this->updatecart();

}

else

{ $this->errmessage="商品数量小于或等于零!";

return false;

}

}

else

{$this->errmessage="商品不存在!";

return false;

}

}

//修改一件商品的单价 参数介绍同修改商品数量

function modifyprice($id,$num)

{

//session_start();

$mycart = $_SESSION["mycart"] ;

if (! empty($mycart[$id][$this->f_key]))

{ if ($num>0)

{ $mycart[$id][$this->f_goldkey]=$num;

$this->cart=$mycart;

$_SESSION["mycart"]=$mycart;

$this->updatecart();

}

else

{$this->errmessage="商品金额小于或等于零!";

return false;

}

}

else

{$this->errmessage="商品不存在!";

return false;

}

}//modifyprice end

//某件商品加1 参数为商品在购物车内的序号

function add1($id)

{

//session_start();

$mycart = $_SESSION["mycart"] ;

$mycart[$id][$this->f_numkey]+=1;

$this->cart=$mycart;

$_SESSION["mycart"]=$mycart;

$this->updatecart();

}

//某件商品减1 参数为商品在购物车内的序号

function del1($id)

{

//session_start();

$mycart = $_SESSION["mycart"] ;

if($mycart[$id][$this->f_numkey]>1)

$mycart[$id][$this->f_numkey]-=1;

else

{$this->errmessage="购物车内此商品只有一件,不可减1!";

return false;}

$this->cart=$mycart;

$_SESSION["mycart"]=$mycart;

$this->updatecart();

}

}//class end

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有