如何使用新版购物车查找功能?
<?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 ?>