php網(wǎng)上商城購物車設計代碼分享
更新時間:2012年02月15日 18:25:26 作者:
我們要做的是一個可以包含促銷活動的購物車,所以比較其他簡單的購物車,會稍微復雜一點。(用的是PHP的zend framework框架)
首先,購物車的數(shù)據(jù)庫設計:
1. id
2. goods_id 商品ID
3. session_id 購物車ID
4. goods_sn 商品編碼
5. goods_name 商品名稱
6. shop_price 商品商城售價
7. goods_price 商品真實售價(與shop_price的區(qū)別在于,當打折的時候,shop_price是打折之前商品的售價,而goods_price是打折之后的)
8. goods_number 數(shù)量
9. weight 商品重量
10. goods_attr 商品屬性(如顏色,尺碼)
11. promote_code 促銷編碼(為商品促銷,做的策略模式識別碼)
12. is_promote 促銷ID
13. stock_id 庫存ID
數(shù)據(jù)庫結構大概是這個樣子。當然如果還有其他的需求,比如商品的返利積分,商品是否虛擬產(chǎn)品,商品是否代發(fā)貨等等,可以另加標示符。這里就不一一舉例了。
第二點,我們這個購物車要求是在用戶不登陸狀態(tài)下可以把商品添加到購物車內的,這也是最近非常流行的一種方式,所以在購物車數(shù)據(jù)庫設計里面,就沒有加入user_id這個字段,考慮到的是用戶未登陸下也可以把商品放入購物車。
那么識別購物車到底是哪一位用戶的話,就是需要用到session_id,是用戶對應購物車的唯一識別碼。生成這個碼可以放在購物車對象Cart的構造函數(shù)里:
/**
* 購物車類購物方法
* @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;
}
凡事有利就有弊,這個設計的好處是未登錄就可以使用購物車;不好處就是兩人共用一臺電腦,購物車無法判斷商品到底是哪一個人的。
第三點,添加一個商品到購物車。
添加一個商品到購物車,在這里,我把它想成是兩個動作。
第一個動作:添加商品到購物車數(shù)據(jù)庫里面。
第二個動作:查找購物車所有商品,并顯示出來。
首先是第一個動作:
/**
* 添加商品
*/
public function goodsAddAction()
{
// 添加商品使用get請求
$goods_id = $this->_getParam('goods_id');//商品ID
$goods_spec = $this->_getParam('filter_name');//商品屬性(顏色,尺碼)
$goods_number = $this->_getParam('goods_number');//商品數(shù)量
$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);
這就是添加商品操作函數(shù),這里面的$promote_name是促銷的一個參數(shù),具體是用策略模式來選用哪種促銷策略,我準備在下一篇文章具體來討論。這里只要知道是添加這個商品的基本信息,存入到購物車數(shù)據(jù)庫里即可。
其次就是第二個動作:
/**
* 購物列表
*/
public function indexAction()
{
//獲取購物車實例
$cartB = $this->_getCart();
//列出購物車內所有商品
$this->view->goods_list = $cartB->goodsViewList();
//獲取用于顯示規(guī)則消息的規(guī)則實例列表
$this->view->tips = $cartB->goodsTipRules();
//購物車內商品總數(shù)量
$this->view->total_number = $cartB->getTotalGoodsNumber();
//獲取購物車內商品總貨額
$this->view->total_amount = $cartB->getTotalAmount();
}
1. id
2. goods_id 商品ID
3. session_id 購物車ID
4. goods_sn 商品編碼
5. goods_name 商品名稱
6. shop_price 商品商城售價
7. goods_price 商品真實售價(與shop_price的區(qū)別在于,當打折的時候,shop_price是打折之前商品的售價,而goods_price是打折之后的)
8. goods_number 數(shù)量
9. weight 商品重量
10. goods_attr 商品屬性(如顏色,尺碼)
11. promote_code 促銷編碼(為商品促銷,做的策略模式識別碼)
12. is_promote 促銷ID
13. stock_id 庫存ID
數(shù)據(jù)庫結構大概是這個樣子。當然如果還有其他的需求,比如商品的返利積分,商品是否虛擬產(chǎn)品,商品是否代發(fā)貨等等,可以另加標示符。這里就不一一舉例了。
第二點,我們這個購物車要求是在用戶不登陸狀態(tài)下可以把商品添加到購物車內的,這也是最近非常流行的一種方式,所以在購物車數(shù)據(jù)庫設計里面,就沒有加入user_id這個字段,考慮到的是用戶未登陸下也可以把商品放入購物車。
那么識別購物車到底是哪一位用戶的話,就是需要用到session_id,是用戶對應購物車的唯一識別碼。生成這個碼可以放在購物車對象Cart的構造函數(shù)里:
復制代碼 代碼如下:
/**
* 購物車類購物方法
* @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;
}
凡事有利就有弊,這個設計的好處是未登錄就可以使用購物車;不好處就是兩人共用一臺電腦,購物車無法判斷商品到底是哪一個人的。
第三點,添加一個商品到購物車。
添加一個商品到購物車,在這里,我把它想成是兩個動作。
第一個動作:添加商品到購物車數(shù)據(jù)庫里面。
第二個動作:查找購物車所有商品,并顯示出來。
首先是第一個動作:
復制代碼 代碼如下:
/**
* 添加商品
*/
public function goodsAddAction()
{
// 添加商品使用get請求
$goods_id = $this->_getParam('goods_id');//商品ID
$goods_spec = $this->_getParam('filter_name');//商品屬性(顏色,尺碼)
$goods_number = $this->_getParam('goods_number');//商品數(shù)量
$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);
這就是添加商品操作函數(shù),這里面的$promote_name是促銷的一個參數(shù),具體是用策略模式來選用哪種促銷策略,我準備在下一篇文章具體來討論。這里只要知道是添加這個商品的基本信息,存入到購物車數(shù)據(jù)庫里即可。
其次就是第二個動作:
復制代碼 代碼如下:
/**
* 購物列表
*/
public function indexAction()
{
//獲取購物車實例
$cartB = $this->_getCart();
//列出購物車內所有商品
$this->view->goods_list = $cartB->goodsViewList();
//獲取用于顯示規(guī)則消息的規(guī)則實例列表
$this->view->tips = $cartB->goodsTipRules();
//購物車內商品總數(shù)量
$this->view->total_number = $cartB->getTotalGoodsNumber();
//獲取購物車內商品總貨額
$this->view->total_amount = $cartB->getTotalAmount();
}
這里第一個和第二個動作必須是要分開的,因為用戶也可以不添加商品直接點購物車。
下面是效果圖:
第一次發(fā)帖,有什么不足,不清楚的,還請見諒。歡迎討論!
相關文章
php截取字符串函數(shù)substr,iconv_substr,mb_substr示例以及優(yōu)劣分析
php進行中文字符串的截取時,會經(jīng)常用到二個函數(shù)iconv_substr和mb_substr,對這二個函數(shù)應該如何選擇呢?參考下本文介紹的例子就明白了。2014-06-06win平臺安裝配置Nginx+php+mysql 環(huán)境
本文給大家分享的是win平臺安裝配置Nginx+php+mysql 環(huán)境的方法和步驟,有需要的小伙伴可以參考下。2016-01-01用PHP實現(xiàn)的生成靜態(tài)HTML速度快類庫
用PHP實現(xiàn)的生成靜態(tài)HTML速度快類庫...2007-03-03CodeIgniter配置之routes.php用法實例分析
這篇文章主要介紹了CodeIgniter配置之routes.php用法,結合實例形式分析了routes.php中常用配置參數(shù)的含義及具體使用技巧,需要的朋友可以參考下2016-01-01