購物車類
購物車類允許項目被添加到session中,session在用戶瀏覽你的網(wǎng)站期間都保持有效狀態(tài)。這些項目能夠以標(biāo)準(zhǔn)的 "購物車" 格式被檢索和顯示,并允許用戶更新數(shù)量或者從購物車中移除項目。
請注意購物車類只提供核心的"購物車"功能。它不提供配送、信用卡授權(quán)或者其它處理組件。
初始化購物車類
重要:購物車類利用 CodeIgniter 的 Session 類把購物車信息保存到數(shù)據(jù)庫中,所以在使用購物車類之前,你必須根據(jù) Session 類文檔中的說明來創(chuàng)建數(shù)據(jù)庫表,并且在 application/config/config.php 文件中把 Session 相關(guān)參數(shù)設(shè)置為使用數(shù)據(jù)庫。
為了在你的控制器構(gòu)造函數(shù)中初始化購物車類,請使用 $this->load->library 函數(shù):
$this->load->library('cart');
一旦加載,就可以通過調(diào)用 $this->cart 來使用購物車對象了。
說明: 購物車類會自動加載和初始化Session類,因此除非你在別處要用到session,否則你不需要再次加載Session類。
將一個項目添加到購物車
要添加項目到購物車,只需將一個包含了商品信息的數(shù)組傳遞給 $this->cart->insert() 函數(shù)即可,就像下面這樣:
$data = array(
???????????????'id'????? => 'sku_123ABC',
???????????????'qty'???? => 1,
???????????????'price'?? => 39.95,
???????????????'name'??? => 'T-Shirt',
???????????????'options' => array('Size' => 'L', 'Color' => 'Red')
????????????);
$this->cart->insert($data);
重要說明: 上面的前四個數(shù)組索引 (id, qty, price 和name) 是 必需的。 如果缺少其中的任何一個,數(shù)據(jù)將不會被保存到購物車中。第5個索引 (options) 是可選的。當(dāng)你的商品包含一些相關(guān)的選項信息時,你就可以使用它。正如上面所顯示的那樣,請使用一個數(shù)組來保存選項信息。注意:$data['price'] 的值必須大于0
五個保留的索引分別是:
- id - 你的商店里的每件商品都必須有一個唯一的標(biāo)識符(identifier)。典型的標(biāo)識符是 "sku"(譯者注:庫存量單位) 或者其它類似的標(biāo)識符。
- qty - 購買的數(shù)量(quantity)。
- price - 商品的價格(price)。
- name - 商品的名稱(name)。
- options - 標(biāo)識商品的任何附加屬性。必須通過數(shù)組來傳遞。
除以上五個索引外,還有兩個保留字:rowid 和 subtotal。它們是購物車類內(nèi)部使用的,因此,往購物車中插入數(shù)據(jù)時,請不要使用這些詞作為索引。
你的數(shù)組可能包含附加的數(shù)據(jù)。你的數(shù)組中包含的所有數(shù)據(jù)都會被存儲到session中。然而,最好的方式是標(biāo)準(zhǔn)化你所有商品的數(shù)據(jù),這樣更方便你在表格中顯示它們。
The insert() method will return the $rowid if you successfully insert a single item.
將多個項目添加到購物車
通過下面這種多維數(shù)組的方式,可以一次性添加多個產(chǎn)品到購物車中。當(dāng)你希望允許用戶選擇同一頁面中的多個項目時,這就非常有用了。
$data = array(
???????????????array(
???????????????????????'id'????? => 'sku_123ABC',
???????????????????????'qty'???? => 1,
???????????????????????'price'?? => 39.95,
???????????????????????'name'??? => 'T-Shirt',
???????????????????????'options' => array('Size' => 'L', 'Color' => 'Red')
????????????????????),
???????????????array(
???????????????????????'id'????? => 'sku_567ZYX',
???????????????????????'qty'???? => 1,
???????????????????????'price'?? => 9.95,
???????????????????????'name'??? => 'Coffee Mug'
????????????????????),
???????????????array(
???????????????????????'id'????? => 'sku_965QRS',
???????????????????????'qty'???? => 1,
???????????????????????'price'?? => 29.95,
???????????????????????'name'??? => 'Shot Glass'
????????????????????)
????????????);
$this->cart->insert($data);
顯示購物車
為了顯示購物車的數(shù)據(jù),你得創(chuàng)建一個 視圖文件,它的代碼類似于下面這個。
請注意這個范例使用了表單輔助函數(shù).
更新購物車
為了更新購物車中的信息,你必須將一個包含了 Row ID 和數(shù)量(quantity)的數(shù)組傳遞給 $this->cart->update() 函數(shù):
說明: 如果數(shù)量被設(shè)置為 0 ,那么購物車中對應(yīng)的項目會被移除。
$data = array(
???????????????'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
???????????????'qty'?? => 3
????????????);
$this->cart->update($data);
// 或者是一個多維數(shù)組
$data = array(
???????????????array(
???????????????????????'rowid'?? => 'b99ccdf16028f015540f341130b6d8ec',
???????????????????????'qty'???? => 3
????????????????????),
???????????????array(
???????????????????????'rowid'?? => 'xw82g9q3r495893iajdh473990rikw23',
???????????????????????'qty'???? => 4
????????????????????),
???????????????array(
???????????????????????'rowid'?? => 'fh4kdkkkaoe30njgoe92rkdkkobec333',
???????????????????????'qty'???? => 2
????????????????????)
????????????);
$this->cart->update($data);
什么是 Row ID?? 當(dāng)一個項目被添加到購物車時,程序所生成的那個唯一的標(biāo)識符就是row ID。創(chuàng)建唯一ID的理由是,當(dāng)購物車中相同的商品有不同的選項時,購物車就能夠?qū)λ鼈冞M行管理。
比如說,有人購買了兩件相同的T-shirt (相同的商品ID),但是尺寸不同。商品ID(以及其它屬性)都會完全一樣,因為它們是相同的T-shirt。它們唯一的差別就是尺寸不同。因此購物車必須想辦法來區(qū)分它們,這樣才能獨立地管理這兩件尺寸不同的T-shirt。而基于商品ID和其它相關(guān)選項信息來創(chuàng)建一個唯一的 "row ID" 就能解決這個問題。
在幾乎所有情況下,更新購物車都將是用戶通過 "查看購物車" 頁面來實現(xiàn)的,因此對開發(fā)者來說,不必太擔(dān)心"row ID",只要保證你的 "查看購物車" 頁面中的一個隱藏表單字段包含了這個信息,并且確保它能被傳遞給表單提交時所調(diào)用的更新函數(shù)就行了。請仔細分析上面的 "查看購物車" 頁面的結(jié)構(gòu)以獲取更多信息。
?
函數(shù)參考
$this->cart->insert();
允許你將項目添加到購物車中,就像上面所描述的那樣。
$this->cart->update();
允許你更新購物車中的項目,就像上面所描述的那樣。
$this->cart->total();
顯示購物車中的總計金額。
$this->cart->total_items();
顯示購物車中總共的項目數(shù)量。
$this->cart->contents();
返回一個包含了購物車中所有信息的數(shù)組。
$this->cart->has_options(rowid);
如果購物車中特定的列包含選項信息,本函數(shù)會返回 TRUE(布爾值)。本函數(shù)被設(shè)計為與 $this->cart->contents() 一起在循環(huán)中使用,因此就像上面的 顯示購物車 范例所顯示的那樣,你必須把 rowid 傳遞給這個函數(shù)。
$this->cart->product_options(rowid);
以數(shù)組的形式返回特定商品的選項信息。本函數(shù)被設(shè)計為與 $this->cart->contents() 一起在循環(huán)中使用,因此就像上面的 顯示購物車 范例所顯示的那樣,你必須把 rowid 傳遞給這個函數(shù)。
$this->cart->destroy();
允許你銷毀購物車。這個函數(shù)一般是在你處理完用戶訂單后調(diào)用。
?