复制代码 代码如下:
/*****************************************************************************************************
name购物车
version1.1
authorvanni(凡林) url:www.27sea.com qq:303590170
createdate2005-05-31
description
此类是基于javascript和客户端cookie,请保证客户端开启cookie
数据保持(默认24*30小时)可以通过 this.expire=? 小时来指定
类中两自带的两个对象 typeobj 和 proobj 均有两个相同属性名: name 和 value
类中数据存储形式如下-----------------------------------
array(
new typeobj('汽车',array(
new porobj('三菱',200),
new proobj('本田',500)
)
),
new typeobj('蛋',array(
new proobj('鸡蛋',10),
new proobj('鸭蛋',20)
)
}
cookie 存取形式为[使用escape()函数加密过]--------------
购物车名 = 汽车#三菱:200|本田:500,蛋#鸡蛋:10|鸭蛋:20
注意:客户端存cookie时,不会出现问题。如果要循环存储的话,可能会出现有些存入,而有些未存入
解决方法:见下例(获得url里的sales的数量,并存入cookie)
文件:/depot/compareproduct.php 中的js代码片段
*****************************************************************************************************/
/**
cookie类
*/
function cookie(){
/**
@desc 设置cookie
@return void
*/
this.setcookie=function(name, value, hours){
var expire = ;
if(hours != null){
expire = new date((new date()).gettime() + hours * 3600000);
expire = ; expires= + expire.togmtstring();
}
document.cookie = escape(name) + = + escape(value) + expire;
}
/**
@desc 读取cookie
@return string
*/
this.getcookie=function(name){
var cookievalue = ;
var search = escape(name) + =;
if(document.cookie.length > 0){
offset = document.cookie.indexof(search);
if (offset != -1){
offset += search.length;
end = document.cookie.indexof(;, offset);
if (end == -1) end = document.cookie.length;
cookievalue = unescape(document.cookie.substring(offset, end))
}
}
return cookievalue;
}
}
function car(name){
if( !window.clientinformation.cookieenabled ) {
alert('你的浏览器不支持cookie无法使用此 购物车 系统');
return false;
}
//##内部变量#############################################################
this.carname = name;
this.expire = 24*30;//购物车的有效时间(30天)
this.cardatas = new array();
this.cookie = new cookie();
//##内部对象#############################################################
this.typeobj=function(name,value){//自带的 类别 对象
this.name =name;
this.value=/value;
}
this.proobj=function(name,value){//自带的 商品 对象
this.name =name;
this.value=value;
}
//##私有方法列表##########################################################
//
//gettypepoint(typename);//得到购物车里类别数组里的下标
//getpropoint(typename,proname);//得到购物车里类别下的产品下标
//savecookie()//以特定的形式存储此购物车的cookie
//
//########################################################################
/**
@desc 得到购物车里类别数组里的下标,找到的话返回下标,否则返回 -1
@return int
*/
this.gettypepoint=function(typename){
var isok=false;
var i=0;
for(;iif(this.cardatas[i].name==typename){
isok=true;//找到位置
break;
}
}
if(isok)return i;
elsereturn -1;
}
/**
@desc 得到购物车里类别下的产品下标,找到返回下标,否则返回 -1
@return int
*/
this.getpropoint=function(typeid,proname){
var isok=false;
var j = 0;
var tempproobj=this.cardatas[typeid].value;
for(;jif(tempproobj[j].name==proname){
isok=true;
break;
}
}
if(isok)return j;
elsereturn -1;
}
/**
@desc 存储生成的cookie字符串
@return void
*/
this.savecookie=function(){
var outstr='';
for( i=0; ivar typename =this.cardatas[i].name;
var typevalue=this.cardatas[i].value;
var prooutstr='';
for( j=0; jif ( j==0 )prooutstr = typevalue[j].name + ':' + typevalue[j].value;
elseprooutstr += '|' + typevalue[j].name + ':' + typevalue[j].value;
}
if ( i==0 )outstr = typename + '#' + prooutstr;
elseoutstr += ',' + typename + '#' + prooutstr;
}
this.cookie.setcookie(this.carname,outstr,this.expire);//存入 cookie
}
//##构造语句############################################################
if(this.cookie.getcookie(name)==''){
this.cookie.setcookie(name,'',this.expire);
}else{
var temptypes=this.cookie.getcookie(name).split(',');
for(i=0;ivar temptypeobj=temptypes[i].split('#');
var type_pro=new array();
if(temptypeobj[1]){
var tempproobj=temptypeobj[1].split('|');
for(j=0;jvar prodesc=tempproobj[j].split(':');
type_pro.push(new this.proobj(prodesc[0],prodesc[1]));
}
}
this.cardatas.push(new this.typeobj(temptypeobj[0],type_pro));
}
}
//##公共方法列表#########################################################
//
//addtype(typename);//增加一个类别
//addpro(typename,proname,value);//增加一个产品
//editpro(typename,proname,value);//修改产品的值
//delpro(typename,proname);//删除购物车内的一个类别下的产品
//deltype(typename);//删除购物车内的一个类别,包括类别下的产品
//delcar();//删除购物车
//
//getcar();//得到整个购物车的数据
//gettype();//得到购物车内的所有类别列表
//getpro(typename);//得到购物车内指定类别下的产品列表
//getproval(typename,proname);//得到购物车内指定类别下的产品属性
//
//########################################################################
/**
@desc 在购物车里增加一个类别,增加成功返回真,否则返回假
@return bool
*/
this.addtype=function(typename){
if(this.gettypepoint(typename)!=-1)return false;//如果已经有此类别了,返回假
this.cardatas.push(new this.typeobj(typename,new array()));//push进 自身数组
this.savecookie();//存入 cookie
return true;
}
/**
@desc 在购物车里增加一个产品,增加成功返回真,否则返回假
@return bool
*/
this.addpro=function(typename,proname,value){
var typepoint=this.gettypepoint(typename);if ( typepoint ==-1 ) return false;//没有此类别,无法增加,返回假
var propoint =this.getpropoint(typepoint,proname);if ( propoint != -1 ) return false;//有此产品了,无法增加重复,返回假
this.cardatas[typepoint].value.push(new this.proobj(proname,value));//push到自身数组
this.savecookie();//存入 cookie
return true;
}
/**
@desc 修改购物车里的产品属性
@return bool
*/
this.editpro=function(typename,proname,value){
var typepoint=this.gettypepoint(typename);if ( typepoint == -1 ) return false;//没有此类别,无法修改,返回假
var propoint =this.getpropoint(typepoint,proname);if ( propoint == -1 ) return false;//没有此产品,无法修改,返回假
this.cardatas[typepoint].value[propoint].value=value;//更新自身
this.savecookie();//存入 cookie
return true;
}
/**
@desc 删除一个产品
@return bool
*/
this.delpro=function(typename,proname){
var typepoint=this.gettypepoint(typename);if ( typepoint == -1 ) return false;//没有此类别,无法删除,返回假
var propoint =this.getpropoint(typepoint,proname);if ( propoint == -1 ) return false;//没有此产品,无法删除,返回假
var pros=this.cardatas[typepoint].value.length;
this.cardatas[typepoint].value[propoint] = this.cardatas[typepoint].value[pros-1];//最后一个产品放置要删除的产品上
this.cardatas[typepoint].value.pop();
this.savecookie();//存入 cookie
return true;
}
/**
@desc 删除一个类别
@return bool
*/
this.deltype=function(typename){
var typepoint=this.gettypepoint(typename);if ( typepoint == -1 ) return false;//没有此类别,无法删除,返回假
var types=this.cardatas.length;
this.cardatas[typepoint] = this.cardatas[types-1];//删除类别
this.cardatas.pop();
this.savecookie();//存入 cookie
return true;
}
/**
@desc 删除此购物车
@return void
*/
this.delcar=function(){
this.cookie.setcookie(this.carname,'',0);
this.cardatas=new array();
this.savecookie();//存入 cookie
}
/**
@desc 获得购物车数据
@return array
*/
this.getcar=function(){
return this.cardatas;
}
/**
@desc 获得类别列表
@return array
*/
this.gettype=function(){
var returnarr=new array();
for ( i=0; ireturn returnarr;
}
/**
@desc 获得类别下的产品列表
@return array
*/
this.getpro=function(typename){
var typepoint=this.gettypepoint(typename);if ( typepoint == -1 ) return false;//没有此类别,返回假
return this.cardatas[typepoint].value;
}
/**
@desc 获得商品属性
@return string
*/
this.getproval=function(typename,proname){
var typepoint=this.gettypepoint(typename);if ( typepoint == -1 ) return false;//没有此类别,返回假
var propoint =this.getpropoint(typepoint,proname);if ( propoint == -1 ) return false;//没有此产品,返回假
return this.cardatas[typepoint].value[propoint].value;
}
}