1. id
2. goods_id 商品ID
3. session_id 购物车ID
4. goods_sn 商品编码
5. goods_name 商品名称
6. shop_price 商品商城售价
7. goods_price 商品真实售价(与shop_price的区别在于,当打折的时候,shop_price是打折之前商品的售价,而goods_price是打折之后的)
8. goods_number 数量
9. weight 商品重量
10. goods_attr 商品属性(如颜色,尺码)
11. promote_code 促销编码(为商品促销,做的策略模式识别码)
12. is_promote 促销ID
13. stock_id 库存ID
数据库结构大概是这个样子。当然如果还有其他的需求,比如商品的返利积分,商品是否虚拟产品,商品是否代发货等等,可以另加标示符。
第二点,这个购物车要求是在用户不登陆状态下可以把商品添加到购物车内的,这也是最近非常流行的一种方式,所以在购物车数据库设计里面,就没有加入user_id这个字段,考虑到的是用户未登陆下也可以把商品放入购物车。
那么识别购物车到底是哪一位用户的话,就是需要用到session_id,是用户对应购物车的唯一识别码。生成这个码可以放在购物车对象Cart的构造函数里:
- /**
- * 购物车类购物方法
- * website: www.jbxue.com
- * @param string $cart_id 购物车ID
- */
- public function __construct()
- {
- Zend_Session::start();
- $this->_session = new Zend_Session_Namespace('ShopCart');
- if(!isset($this->_session->session_id))
- {
- $this->_session->session_id = md5(uniqid(mt_rand(), true));
- $this->_session->info = array();
- }
- $this->_cart_id = $this->_session->session_id;
- }
凡事有利就有弊,这个设计的好处是未登录就可以使用购物车;不好处就是两人共用一台电脑,购物车无法判断商品到底是哪一个人的。
第三点,添加一个商品到购物车。
添加一个商品到购物车,在这里,我把它想成是两个动作。
第一个动作:添加商品到购物车数据库里面。
第二个动作:查找购物车所有商品,并显示出来。
首先是第一个动作:
- /**
- * 添加商品
- * website: www.jbxue.com
- */
- public function goodsAddAction()
- {
- // 添加商品使用get请求
- $goods_id = $this->_getParam('goods_id');//商品ID
- $goods_spec = $this->_getParam('filter_name');//商品属性(颜色,尺码)
- $goods_number = $this->_getParam('goods_number');//商品数量
- $promote_name = $this->_getParam('promote_name', 'Default');//促销策略
- //获取购物车实例
- $cartB = $this->_getCart();
- $cartB->goodsAdd($goods_id, $goods_spec, $goods_number, $promote_name);
- //添加成功,跳转到下一步,查找购物车所有商品,并显示出来。
- $this->_showMessage(Bll_Context::isError() ? Bll_Context::getError() : '添加到购物篮成功!', Bll_Context::getRecirect('/orderv2'), 3);
- }
上段代码第15行:
$cartB->goodsAdd($goods_id, $goods_spec, $goods_number, $promote_name);
这就是添加商品操作函数,这里面的$promote_name是促销的一个参数,具体是用策略模式来选用哪种促销策略,我准备在下一篇文章具体来讨论。这里只要知道是添加这个商品的基本信息,存入到购物车数据库里即可。
其次就是第二个动作:
- /**
- * 购物列表
- */
- public function indexAction()
- {
- //获取购物车实例
- $cartB = $this->_getCart();
- //列出购物车内所有商品
- $this->view->goods_list = $cartB->goodsViewList();
- //获取用于显示规则消息的规则实例列表
- $this->view->tips = $cartB->goodsTipRules();
- //购物车内商品总数量
- $this->view->total_number = $cartB->getTotalGoodsNumber();
- //获取购物车内商品总货额
- $this->view->total_amount = $cartB->getTotalAmount();
- }
这里第一个和第二个动作必须是要分开的,因为用户也可以不添加商品直接点购物车。
您可能感兴趣的文章:
php网上商城购物车代码
php 购物车完整实现代码
php 购物车功能实现代码(入门例子)
php 购物车类的实现代码(单例模式)
php 购物车类实现代码
php 购物车代码示例
php 购物车类的实现代码

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1
好用且免費的程式碼編輯器