浅析齐博商城中购物车的实现原理

由于前段时间帮以前的一个朋友做了相关的开发扩展,现在就具体的商城实现技术来说一下,同时也要大赞一下龙老大的实现确实是:大道至简!

先来看一下一般商城的大致流程(画了个草图,大家别吐糟)



我主要进行的扩展就是在商品页增加两个下拉菜单的选项,一个是数量的克数,一个是研磨方法(因为我的朋友他做的是咖啡网站,就是要卖咖啡的,所以涉及到这两个选项),具体如下:



在做的过程中我主要碰到了两个问题:

1.如果将这两个提交的值传递到右边“订购”的HREF里面去,然后传递给下一页面(由于齐博的这个商品展示页面并不是表单形式的,所以要用到JS,而我又不太会)

2.提交过去后如果与原来有的程序更好的融合,因为现在多了一个研磨方法,而原来的COOKIE中仅仅只保留商品ID(很麻烦的问题)

具体我的做法:

对于问题一,我在网上找到了方法:

<script language="javascript">
function GoToGold(code)
{   
	 var a = document.getElementById("blogShow1");  
    a.href = a.href+"&id="+code; 
		
}
function GoToGold2(code)
{   
    alert(code);
	 var a = document.getElementById("blogShow1");   
    a.href = a.href+"&id2="+code; 
}
</script>
      黄金品种:           
              <select name="GoldType" οnchange=" GoToGold(this.options[this.selectedIndex].value);">
                <option value="A1USHA">沪黄1</option>
                <option value="A2USHG">沪黄2</option>
              </select>
          
 黄金品种2:           
              <select name="GoldType2" οnchange=" GoToGold2(this.options[this.selectedIndex].value);">
                <option value="A1">黄1</option>
                <option value="A2">黄2</option>
              </select>
<a href="my.html" id="blogShow1">ui_show_upper</a>  

大概也就是上面的这种方法就可以解决。

第二个方法,这个就还要说到齐博的具体的购物车实现了,下面来具体讲讲。

齐博在购物车中一个重要的设计思想就是利用COOKIES来保存用户已经购买的商品,而其保存的方式是采用字符串的形式,比如我购买了3个商品ID为302的商品,2个505的商品,那么COOKIES中对应的全部商品信息变量即为

COOKIES[buyid]='302,302,3202,505,505'

这样虽然很简单,但是这样就带来了一个问题就是扩展不好处理,也就是前面我提到的第二个问题。

大概来说一下在程序方面齐博的具体操作流程:


关于商品的相关信息基本都是用COOKIE来存储,这样可以做为全局变量来容易获取。

下面主要来说一下如果是“其他情况”(也就是当用户选择订购后进入的页面),程序会根据COOKIES[buyid]来获取各个商品的数量,然后采用一个数组$numdb来存储。

具体程序如下:

$detail=explode(",",$buyid);
foreach( $detail AS $key=>$value){
	if(!is_numeric($value)){
		unset($detail[$key]);
	}
	$numdb[$value]++;
}
然后从数据库中获取商品的一些属性,最后全部放到$listdb数组中供模板输出。

从这个过程可以看出,当我们每次查看一个商品然后点订购后,$numdb数组都会重新初始化,也就是说这个数组并不是全局变量。(我最开始以为是,然后就在这个数组里存储信息,结果每次再购物时都会被初始化,郁闷死)

因为我发现了无论是在哪一个JOB里面,程序都是获取COOKIES里面的变量,而且处理完后也会把处理好后的新信息放回COOIES中,保证下次其他程序获取COOKIES的变量是最新的,那我就很自然想到了我也处理COOKIES,然后很好的和程序衔接。

再来具体说一下我做的一些扩展,在获取克数和研磨方法后,对于克数,我把他当作商品的数量,然后研磨方法我自己新建立了一个COOKIES的变量,这样就OK了,具体的
我采用这种方法来存储研磨方法:

$buytype='523#细度研磨,524#中度研磨,525#高度研磨,';

这样在获取这个$COOKIES[buytype]时,我采用PHP的自带函数进行分隔就很容易得到了某个选择的商品他选择的研磨方法,具体分隔处理如下:

    $buyid=rtrim($buyid, ',');  
	$detail=explode(",",$buyid);
	foreach( $detail AS $key=>$value){
		$detail2=explode("#",$value);
		$detail[$key]=$detail2;
	}

结果如下:

Array
(
    [0] => Array
        (
            [0] => 523
            [1] => 细度研磨
        )

    [1] => Array
        (
            [0] => 524
            [1] => 中度研磨
        )

    [2] => Array
        (
            [0] => 525
            [1] => 高度研磨
        )

)
这样程序就很容易得到研磨方法了。

还有的一些就不再一一细说了,主要是我这次真正体会到了COOKIES在购物车中的使用方法,觉得非常赞。同时我发现自己做事有时候不太注重整体,没有规划,不搞清楚具体的情况就开始处理,太不应该了,在处理本次的问题时我就是,没有弄清楚购物车具体的实现,一上来就乱搞一通,结果不是被初始化就是出错,郁闷。所以,以后处理问题的时候先要分析问题的关键所在,弄清楚问题的具体情况,然后对需要处理的问题仔细规划解决方法,所谓“磨刀不误砍柴工”,说的就是这个道理!

P。S。水品太次,时间有限,简单写了一下,希望大牛们看到了不要喷就行偷笑

本人微博:http://weibo.com/xujiajay  (欢迎关注大笑)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值