前言

 

开发一个电子商务网站要考虑的最基本的四个模块分别是产品模块、购物车模块、订单模块以及个人中心模块,除了个人中心模块其他的三个模块都是必要的(最起码的浏览商品加入购物车下单)。产品模块在我的第一篇博文关注电子商务网站开发-《产品表结构》已经提到,今天要写的是购物车模块,JS面向对象+Jquery,支持绝大部分电子商务网站,希望可以给一些准备做这一行或者对这行感兴趣的同学一些启发。

 

文章主要说明思路并解释重要部分的代码,结尾会附上源码。

引用

主要用到的插件$.cookie这个插件在我上一篇文章中已经介绍关注电子商务网站开发-《简单易用的JQUERY插件--图片延时加载插件(lazyload)》

思路

 

第一步:声明购物车对象

代码

 
Cart = {
    Product: new Array(),
    TotalPrice: 0,
    Limit: 40,
    Add: function (product) {
        //...
    },
    FindProductBySku: function (sku){
        //...
    },
    Account: function () {
        //...
    },
    SaveCookie: function () {
        //...
    },
    ClearCookie: function () {
        //...
    },
    Load: function () {
        //...
    }
}
 

购物车中有众多属性和方法,如产品集合Product;总价格TotalPrice;个数限制Limit;添加一个商品到购物车Add;查找购物车中是否存在某商品FindProductBySku;计算价格Account;保存产品信息到cookie中的SaveCookie;清除购物车的ClearCookie;加载购物车的Load。还有一些其他方法,就不一一介绍了,感兴趣的可以在源码中查看。

 

第二步:加入购物车

加入购物车是通过方法Add操作的,参数为product对象,product对象也有自己的属性,有名称name,编码sku,价格price,添加的个数count,属性attribute,添加的时候要先声明一个product对象,并且为product的每个属性赋值,代码如:

 
var product = {};
var para=’201210120006,商品X,480,1,红色’;
                product.sku = para.split(',')[0];
                product.name = para.split(',')[1];
                product.price = para.split(',')[2];
                product.count = para.split(',')[3];
                product.attribute = para.split(',')[4];
                Cart.Add(product);
 

添加商品的主要思路是判断购物车是否有商品,如果没有,显示购物车并且添加商品;如果有,判断购物车中是否存在该商品(用到方法:FindProductBySku),如果存在,则数量增加,如果不存在,则添加到购物车。

 

第三步:计算价格和个数

总价格的计算是通过遍历产品集合然后相加得到的,总个数也就是产品集合的个数,相对来说这一步比较简单。

代码:

 
Account: function () {
        var allamount = 0.0;
        for (var i = 0; i < this.Product.length; i++) {
            var price = this.Product[i].price; //单价
            var count = this.Product[i].count; //单价
            var rowamount = parseFloat(price) * parseFloat(count); //单个总价
            allamount += rowamount;
        }
        this.TotalPrice = parseFloat(allamount).toFixed(1);
        
    }
 


 

第四步:保存到cookie

为了保证购物车是全局的,产品信息必须要记录到cookie中,期限为3天,原则是每种产品记录一条,这是考虑到浏览器cookie的大小限制,还要考虑到cookie的个数限制,所以加入购物车时也会做一个个数限制。每条cookie记录了产品的所有属性,每种属性用符号^隔开,用符号隔开是为了加载的时候解析,用^符号是因为有些产品的名字也可能出现一些常用的标点符号。同时为了全局实时的显示购物车的数量,可以在网站通用的头部加个ID为cartcount元素,这样每一次添加商品都会做相应的显示。

代码:

 
SaveCookie: function () {
        for (var i = 0; i < this.Product.length; i++) {
            var productSku = this.Product[i].sku; //产品编码
            var productName = this.Product[i].name; //产品名称
            var productPrice = this.Product[i].price; //产品单价
            var productCount = this.Product[i].count; //产品数量
            var productAttribute = this.Product[i].attribute; //产品属性
            var productInfo = productSku + "^" + productName + "^" + productPrice + "^" + productCount + "^" + productAttribute
            $.cookie("productInfo" + i, productInfo, { expires: 3, path: '/' });
        }
        $.cookie("cartCount", this.Product.length, { expires: 3, path: '/' });
        $.cookie("cartTotlePrice", this.TotalPrice, { expires: 3, path: '/' });
        $("#cartcount").html(this.Product.length);
}
 

其他:

还有一个LOAD方法,此方法是在进入购物车页面或者进入要进行购物车操作页面(商品列表页面)时调用的,代码:

 
Load: function () {
        var cartCount = $.cookie("cartCount") - 0;
        if (cartCount != 0) {
            for (var i = 0; i < cartCount; i++) {
                var productInfo = $.cookie("productInfo" + i);
                var product = {};
                var temp = "";
                var productItemPrice = "";

                product.sku = productInfo.split('^')[0]; //产品编码
                product.name = productInfo.split('^')[1]; //产品名称
                product.price = productInfo.split('^')[2]; //产品单价
                product.count = productInfo.split('^')[3]; //产品数量
                product.attribute = productInfo.split('^')[4]; //产品属性
                this.Product.push(product);
            }
            Cart.Account();
        }
       
    }
 

基本方法就这些,这里做了两个页面用来实现购物车功能,感兴趣的同学可以去体验一下。

点击这里:购物车页面商品列表页面

点击这里下载

posted on 2013-04-24 15:16  骑牛射雕  阅读(437)  评论(0编辑  收藏  举报