CodeIgniter 購(gòu)物車類

2018-07-21 15:39 更新

購(gòu)物車類

購(gòu)物車類允許項(xiàng)目被添加到 session 中,session 在用戶瀏覽你的網(wǎng)站期間都保持有效狀態(tài)。 這些項(xiàng)目能夠以標(biāo)準(zhǔn)的 "購(gòu)物車" 格式被檢索和顯示,并允許用戶更新數(shù)量或者從購(gòu)物車中移除項(xiàng)目。

重要

購(gòu)物車類已經(jīng)廢棄,請(qǐng)不要使用。目前保留它只是為了向前兼容。

請(qǐng)注意購(gòu)物車類只提供核心的 "購(gòu)物車" 功能。它不提供配送、信用卡授權(quán)或者其它處理組件。

使用購(gòu)物車類

初始化購(gòu)物車類

重要
購(gòu)物車類利用 CodeIgniter 的 Session 類 把購(gòu)物車信息保存到數(shù)據(jù)庫(kù)中, 所以在使用購(gòu)物車類之前,你必須根據(jù) Session 類文檔 中的說明來創(chuàng)建數(shù)據(jù)庫(kù)表, 并且在 application/config/config.php 文件中把 Session 相關(guān)參數(shù)設(shè)置為使用數(shù)據(jù)庫(kù)。

為了在你的控制器構(gòu)造函數(shù)中初始化購(gòu)物車類,請(qǐng)使用 $this->load->library 函數(shù):

$this->load->library('cart');

一旦加載,就可以通過調(diào)用 $this->cart 來使用購(gòu)物車對(duì)象了:

$this->cart

注解

購(gòu)物車類會(huì)自動(dòng)加載和初始化 Session 類,因此除非你在別處要用到 session,否則你不需要再次加載 Session 類。

將一個(gè)項(xiàng)目添加到購(gòu)物車

要添加項(xiàng)目到購(gòu)物車,只需將一個(gè)包含了商品信息的數(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);

重要
上面的前四個(gè)數(shù)組索引(id、qty、price 和 name)是 必需的 。 如果缺少其中的任何一個(gè),數(shù)據(jù)將不會(huì)被保存到購(gòu)物車中。第5個(gè)索引(options) 是可選的。當(dāng)你的商品包含一些相關(guān)的選項(xiàng)信息時(shí),你就可以使用它。 正如上面所顯示的那樣,請(qǐng)使用一個(gè)數(shù)組來保存選項(xiàng)信息。

五個(gè)保留的索引分別是:

  • id - 你的商店里的每件商品都必須有一個(gè)唯一的標(biāo)識(shí)符。典型的標(biāo)識(shí)符是庫(kù)存量單位(SKU)或者其它類似的標(biāo)識(shí)符。
  • qty - 購(gòu)買的數(shù)量。
  • price - 商品的價(jià)格。
  • name - 商品的名稱。
  • options - 標(biāo)識(shí)商品的任何附加屬性。必須通過數(shù)組來傳遞。

除以上五個(gè)索引外,還有兩個(gè)保留字:rowid 和 subtotal。它們是購(gòu)物車類內(nèi)部使用的, 因此,往購(gòu)物車中插入數(shù)據(jù)時(shí),請(qǐng)不要使用這些詞作為索引。

你的數(shù)組可能包含附加的數(shù)據(jù)。你的數(shù)組中包含的所有數(shù)據(jù)都會(huì)被存儲(chǔ)到 session 中。 然而,最好的方式是標(biāo)準(zhǔn)化你所有商品的數(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() 方法將會(huì)返回一個(gè) id 值( $rowid )。

將多個(gè)項(xiàng)目添加到購(gòu)物車

通過下面這種多維數(shù)組的方式,可以一次性添加多個(gè)產(chǎn)品到購(gòu)物車中。 當(dāng)你希望允許用戶選擇同一頁面中的多個(gè)項(xiàng)目時(shí),這就非常有用了。

$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);

顯示購(gòu)物車

為了顯示購(gòu)物車的數(shù)據(jù),你得創(chuàng)建一個(gè) 視圖文件,它的代碼類似于下面這個(gè)。

請(qǐng)注意這個(gè)范例使用了 表單輔助函數(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>

更新購(gòu)物車

為了更新購(gòu)物車中的信息,你必須將一個(gè)包含了 Row ID 和數(shù)量的數(shù)組傳遞給 $this->cart->update() 函數(shù)。

注解

如果數(shù)量被設(shè)置為 0 ,那么購(gòu)物車中對(duì)應(yīng)的項(xiàng)目會(huì)被移除。

$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);

你也可以更新任何一個(gè)在新增購(gòu)物車時(shí)定義的屬性,如:options、price 或其他用戶自定義字段。

$data = array(
    'rowid'  => 'b99ccdf16028f015540f341130b6d8ec',
    'qty'    => 1,
    'price'  => 49.95,
    'coupon' => NULL
);

$this->cart->update($data);

什么是 Row ID?

當(dāng)一個(gè)項(xiàng)目被添加到購(gòu)物車時(shí),程序所生成的那個(gè)唯一的標(biāo)識(shí)符就是 row ID。 創(chuàng)建唯一 ID 的理由是,當(dāng)購(gòu)物車中相同的商品有不同的選項(xiàng)時(shí),購(gòu)物車就能夠?qū)λ鼈冞M(jìn)行管理。

比如說,有人購(gòu)買了兩件相同的 T-shirt (相同的商品ID),但是尺寸不同。 商品 ID (以及其它屬性)都會(huì)完全一樣,因?yàn)樗鼈兪窍嗤?T-shirt , 它們唯一的差別就是尺寸不同。因此購(gòu)物車必須想辦法來區(qū)分它們, 這樣才能獨(dú)立地管理這兩件尺寸不同的 T-shirt 。而基于商品 ID 和其它相關(guān)選項(xiàng)信息來創(chuàng)建一個(gè)唯一的 "row ID" 就能解決這個(gè)問題。

在幾乎所有情況下,更新購(gòu)物車都將是用戶通過 "查看購(gòu)物車" 頁面來實(shí)現(xiàn)的,因此對(duì)開發(fā)者來說, 不必太擔(dān)心 "row ID" ,只要保證你的 "查看購(gòu)物車" 頁面中的一個(gè)隱藏表單字段包含了這個(gè)信息, 并且確保它能被傳遞給表單提交時(shí)所調(diào)用的更新函數(shù)就行了。 請(qǐng)仔細(xì)分析上面的 "查看購(gòu)物車" 頁面的結(jié)構(gòu)以獲取更多信息。

類參考

classCI_Cart

$product_idrules = '.a-z0-9-'

用于驗(yàn)證商品 ID 有效性的正則表達(dá)式規(guī)則,默認(rèn)是:字母、數(shù)字、連字符(-)、下劃線(_)、句點(diǎn)(.)

$product_name_rules = 'w -.:'

用于驗(yàn)證商品 ID 和商品名有效性的正則表達(dá)式規(guī)則,默認(rèn)是:字母、數(shù)字、連字符(-)、下劃線(_)、冒號(hào)(:)、句點(diǎn)(.)

$product_name_safe = TRUE

是否只接受安全的商品名稱,默認(rèn)為 TRUE 。

insert([$items = array()])

參數(shù):

  • $items (array) -- Items to insert into the cart

返回: TRUE on success, FALSE on failure

返回類型: bool

將項(xiàng)目添加到購(gòu)物車并保存到 session 中,根據(jù)成功或失敗返回 TRUE 或 FALSE 。

update([$items = array()])

參數(shù):

  • $items (array) -- Items to update in the cart

返回: TRUE on success, FALSE on failure

返回類型: bool

該方法用于更新購(gòu)物車中某個(gè)項(xiàng)目的屬性。一般情況下,它會(huì)在 "查看購(gòu)物車" 頁面被調(diào)用, 例如用戶在下單之前修改商品數(shù)量。參數(shù)是個(gè)數(shù)組,數(shù)組的每一項(xiàng)必須包含 rowid 。

remove($rowid)

參數(shù):

  • $rowid (int) -- ID of the item to remove from the cart

返回: TRUE on success, FALSE on failure

返回類型: bool

根據(jù) $rowid 從購(gòu)物車中移除某個(gè)項(xiàng)目。

total()

返回: Total amount

返回類型: int

顯示購(gòu)物車總額。

total_items()

返回: Total amount of items in the cart

返回類型: int

顯示購(gòu)物車中商品數(shù)量。

contents([$newest_first = FALSE])

參數(shù):

  • $newest_first (bool) -- Whether to order the array with newest items first

返回: An array of cart contents

返回類型: array

返回一個(gè)數(shù)組,包含購(gòu)物車的所有信息。參數(shù)為布爾值,用于控制數(shù)組的排序方式。 TRUE 為按購(gòu)物車?yán)锏捻?xiàng)目從新到舊排序,F(xiàn)ALSE 為從舊到新。

get_item($row_id)

參數(shù):

  • $row_id (int) -- Row ID to retrieve

返回: Array of item data

返回類型: array

根據(jù)指定的 $rowid 返回購(gòu)物車中該項(xiàng)的信息,如果不存在,返回 FALSE 。

has_options($row_id = '')

參數(shù):

  • $row_id (int) -- Row ID to inspect

返回: TRUE if options exist, FALSE otherwise

返回類型: bool

如果購(gòu)物車的某項(xiàng)包含 options 則返回 TRUE 。該方法可以用在針對(duì) contents() 方法的循環(huán)中, 你需要指定項(xiàng)目的 rowid ,正如上文 "顯示購(gòu)物車" 的例子中那樣。

product_options([$row_id = ''])

參數(shù):

  • $row_id (int) -- Row ID

返回: Array of product options

返回類型: array

該方法返回購(gòu)物車中某個(gè)商品的 options 數(shù)組。該方法可以用在針對(duì) contents() 方法的循環(huán)中, 你需要指定項(xiàng)目的 rowid ,正如上文 "顯示購(gòu)物車" 的例子中那樣。

destroy()

返回類型: void

清空購(gòu)物車。該函數(shù)一般在用戶訂單處理完成之后調(diào)用。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)