Shopping Cart 類別
當使用者造訪你的購物網站時,Cart 類別允許讓購物項目新增在 session 中,這些項目可以被檢視並且顯示在標準的 "shopping cart" 格式中,並且可以讓使用者去更新購物項目的數量或是移除這些項目
請注意,Cart 類別只提供了核心的 "cart" 函數,並不提供如:運輸、信用卡認証或是其它項目的處理
初始化 Shopping Cart 類別
重要: Shopping Cart 類別使用了 CodeIgniter 的 Session Class 將購物資訊儲存在資料庫中,因此在使用 Shopping Cart 類別前必須先設定好資料庫(詳細請見 Session Documentation ),並在 application/config/config.php 設定好 session 的相關設定
在控制器中初始化 Shopping Cart 類別使用: $this->load->library 函數:
$this->load->library('cart');
載入之後可以這樣使用: $this->cart
注意: Shopping Cart 類別將會自動載入並且初始化 Session Class,除非你在程式中的別的地方有使用 session,否則你並不需要載入 Session Class
在購物車中新增購物商品
透過 $this->cart->insert() 將一個商品資訊的陣列載入即可:
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
);
$this->cart->insert($data);
重要: 前四個索引 (id、qty、price 與 name) 都是必要的,如果少了其中一項,則資料將不會被儲存,第五個索引 (options) 是選擇性的,它是使用在當你的商品具有其它資訊需要被記錄時,將其它資訊以陣列的方式儲存
各保留索引的含意:
- id - 每項商品都必須要有一個唯一值來做為辨識
- qty - 購買的數量
- price - 價格
- name - 商品名稱
- options - 商品額外資訊,必須使用陣列來作為記錄
除了以上五個保留索外,另外還有二個保留字: rowid 與 subtotal,這二個保留字是用在 Shopping Cart 類別的內部,因此請不要用這二個保留字作為索引
針對商品額外資訊,建議你可以在所有商品中訂出一套規則,來讓你更容易的顯示商品資訊
The insert() method will return the $rowid if you successfully insert a single item.
在購物車中新增多項購物商品
如以下所示,透過多維陣列的方式來達成讓使用者在同一時間內選取多項商品
$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);
顯示購物車內的商品
為了顯示購物車內的商品,你必須建立一個 view file 如同以下的範例
請注意,這個範例使用了 form helper
更新購物車內的商品數量
透過 $this->cart->update() 函式載入一個陣列,陣列內容包含 Row ID 與數量:
注意: 如果數量為0則商品將會被移出購物車
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
);
$this->cart->update($data);
// 或是一個多維陣列
$data = array(
array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
),
array(
'rowid' => 'xw82g9q3r495893iajdh473990rikw23',
'qty' => 4
),
array(
'rowid' => 'fh4kdkkkaoe30njgoe92rkdkkobec333',
'qty' => 2
)
);
$this->cart->update($data);
什麼是 Row ID? row ID 是你將商品放物購物車時所產生的一個唯一值,用來標記購物車中的各項商品
舉例來說,有個人買了二件相同的 t-shirt 但不同尺寸,因此在購物車中會出現二個相同的商品編號,所以購物必須要給各個商品一個唯一的 "row ID" 來作為區別
一般來說,使用者會透過檢視購物車的頁面來改變商品的數量,所以在此頁面中你必須確定 "row ID" 的資訊有隱藏在表單中。
函數參考
$this->cart->insert();
允許你新增一樣商品進購物車
$this->cart->update();
允許你更新購物車內的商品
$this->cart->total();
顯示購物車內的商品總金額
$this->cart->total_items();
顯示購物車內的商品數量
$this->cart->contents();
將購物車內的所有商品建立成陣列並且回傳
$this->cart->has_options(rowid);
回傳購物車中的特定資料是否有選項,此函數使用在含有 $this->cart->contents() 的迴圈中並且你必須指定 rowid,回傳值為布林值
$this->cart->product_options(rowid);
回傳購物車中的特定商品是否有選項,此函數使用在含有 $this->cart->contents() 的迴圈中並且你必須指定 rowid,回傳值為布林值
$this->cart->destroy();
允許你刪除一台購物車,當使用者購物完畢時