W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
購物車類允許項目被添加到 session 中,session 在用戶瀏覽你的網(wǎng)站期間都保持有效狀態(tài)。 這些項目能夠以標準的 "購物車" 格式被檢索和顯示,并允許用戶更新數(shù)量或者從購物車中移除項目。
重要
購物車類已經(jīng)廢棄,請不要使用。目前保留它只是為了向前兼容。
請注意購物車類只提供核心的 "購物車" 功能。它不提供配送、信用卡授權(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 來使用購物車對象了:
$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) 是可選的。當你的商品包含一些相關(guān)的選項信息時,你就可以使用它。 正如上面所顯示的那樣,請使用一個數(shù)組來保存選項信息。
五個保留的索引分別是:
除以上五個索引外,還有兩個保留字:rowid 和 subtotal。它們是購物車類內(nèi)部使用的, 因此,往購物車中插入數(shù)據(jù)時,請不要使用這些詞作為索引。
你的數(shù)組可能包含附加的數(shù)據(jù)。你的數(shù)組中包含的所有數(shù)據(jù)都會被存儲到 session 中。 然而,最好的方式是標準化你所有商品的數(shù)據(jù),這樣更方便你在表格中顯示它們。
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'coupon' => 'XMAS-50OFF'
);
$this->cart->insert($data);
如果成功的插入一條數(shù)據(jù)后,insert() 方法將會返回一個 id 值( $rowid )。
通過下面這種多維數(shù)組的方式,可以一次性添加多個產(chǎn)品到購物車中。 當你希望允許用戶選擇同一頁面中的多個項目時,這就非常有用了。
$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ù) 。
<?php echo form_open('path/to/controller/update/method'); ?>
<table cellpadding="6" cellspacing="1" style="width:100%" border="0">
<tr>
<th>QTY</th>
<th>Item Description</th>
<th style="text-align:right">Item Price</th>
<th style="text-align:right">Sub-Total</th>
</tr>
<?php $i = 1; ?>
<?php foreach ($this->cart->contents() as $items): ?>
<?php echo form_hidden($i.'[rowid]', $items['rowid']); ?>
<tr>
<td><?php echo form_input(array('name' => $i.'[qty]', 'value' => $items['qty'], 'maxlength' => '3', 'size' => '5')); ?></td>
<td>
<?php echo $items['name']; ?>
<?php if ($this->cart->has_options($items['rowid']) == TRUE): ?>
<p>
<?php foreach ($this->cart->product_options($items['rowid']) as $option_name => $option_value): ?>
<strong><?php echo $option_name; ?>:</strong> <?php echo $option_value; ?><br />
<?php endforeach; ?>
</p>
<?php endif; ?>
</td>
<td style="text-align:right"><?php echo $this->cart->format_number($items['price']); ?></td>
<td style="text-align:right">$<?php echo $this->cart->format_number($items['subtotal']); ?></td>
</tr>
<?php $i++; ?>
<?php endforeach; ?>
<tr>
<td colspan="2"> </td>
<td class="right"><strong>Total</strong></td>
<td class="right">$<?php echo $this->cart->format_number($this->cart->total()); ?></td>
</tr>
</table>
<p><?php echo form_submit('', 'Update your Cart'); ?></p>
為了更新購物車中的信息,你必須將一個包含了 Row ID 和數(shù)量的數(shù)組傳遞給 $this->cart->update() 函數(shù)。
注解
如果數(shù)量被設(shè)置為 0 ,那么購物車中對應(yīng)的項目會被移除。
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
);
$this->cart->update($data);
// Or a multi-dimensional array
$data = array(
array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
),
array(
'rowid' => 'xw82g9q3r495893iajdh473990rikw23',
'qty' => 4
),
array(
'rowid' => 'fh4kdkkkaoe30njgoe92rkdkkobec333',
'qty' => 2
)
);
$this->cart->update($data);
你也可以更新任何一個在新增購物車時定義的屬性,如:options、price 或其他用戶自定義字段。
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 1,
'price' => 49.95,
'coupon' => NULL
);
$this->cart->update($data);
當一個項目被添加到購物車時,程序所生成的那個唯一的標識符就是 row ID。 創(chuàng)建唯一 ID 的理由是,當購物車中相同的商品有不同的選項時,購物車就能夠?qū)λ鼈冞M行管理。
比如說,有人購買了兩件相同的 T-shirt (相同的商品ID),但是尺寸不同。 商品 ID (以及其它屬性)都會完全一樣,因為它們是相同的 T-shirt , 它們唯一的差別就是尺寸不同。因此購物車必須想辦法來區(qū)分它們, 這樣才能獨立地管理這兩件尺寸不同的 T-shirt 。而基于商品 ID 和其它相關(guān)選項信息來創(chuàng)建一個唯一的 "row ID" 就能解決這個問題。
在幾乎所有情況下,更新購物車都將是用戶通過 "查看購物車" 頁面來實現(xiàn)的,因此對開發(fā)者來說, 不必太擔心 "row ID" ,只要保證你的 "查看購物車" 頁面中的一個隱藏表單字段包含了這個信息, 并且確保它能被傳遞給表單提交時所調(diào)用的更新函數(shù)就行了。 請仔細分析上面的 "查看購物車" 頁面的結(jié)構(gòu)以獲取更多信息。
classCI_Cart
$product_idrules = '.a-z0-9-'
用于驗證商品 ID 有效性的正則表達式規(guī)則,默認是:字母、數(shù)字、連字符(-)、下劃線(_)、句點(.)
$product_name_rules = 'w -.:'
用于驗證商品 ID 和商品名有效性的正則表達式規(guī)則,默認是:字母、數(shù)字、連字符(-)、下劃線(_)、冒號(:)、句點(.)
$product_name_safe = TRUE
是否只接受安全的商品名稱,默認為 TRUE 。
insert([$items = array()])
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
將項目添加到購物車并保存到 session 中,根據(jù)成功或失敗返回 TRUE 或 FALSE 。
update([$items = array()])
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
該方法用于更新購物車中某個項目的屬性。一般情況下,它會在 "查看購物車" 頁面被調(diào)用, 例如用戶在下單之前修改商品數(shù)量。參數(shù)是個數(shù)組,數(shù)組的每一項必須包含 rowid 。
remove($rowid)
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
根據(jù) $rowid 從購物車中移除某個項目。
total()
返回: Total amount
返回類型: int
顯示購物車總額。
total_items()
返回: Total amount of items in the cart
返回類型: int
顯示購物車中商品數(shù)量。
contents([$newest_first = FALSE])
參數(shù):
返回: An array of cart contents
返回類型: array
返回一個數(shù)組,包含購物車的所有信息。參數(shù)為布爾值,用于控制數(shù)組的排序方式。 TRUE 為按購物車里的項目從新到舊排序,F(xiàn)ALSE 為從舊到新。
get_item($row_id)
參數(shù):
返回: Array of item data
返回類型: array
根據(jù)指定的 $rowid 返回購物車中該項的信息,如果不存在,返回 FALSE 。
has_options($row_id = '')
參數(shù):
返回: TRUE if options exist, FALSE otherwise
返回類型: bool
如果購物車的某項包含 options 則返回 TRUE 。該方法可以用在針對 contents() 方法的循環(huán)中, 你需要指定項目的 rowid ,正如上文 "顯示購物車" 的例子中那樣。
product_options([$row_id = ''])
參數(shù):
返回: Array of product options
返回類型: array
該方法返回購物車中某個商品的 options 數(shù)組。該方法可以用在針對 contents() 方法的循環(huán)中, 你需要指定項目的 rowid ,正如上文 "顯示購物車" 的例子中那樣。
destroy()
返回類型: void
清空購物車。該函數(shù)一般在用戶訂單處理完成之后調(diào)用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: