directory search
Array Array Helper Benchmarking Benchmarking Class Caching Caching Driver Calendaring Calendaring Class CAPTCHA CAPTCHA Helper Config Config Class Cookie Cookie Helper Database Connecting to your Database Custom Function Calls Database Caching Class Database Configuration Database Forge Class Database Metadata Database Quick Start: Example Code Database Reference Database Utility Class DB Driver Reference Generating Query Results Queries Query Builder Class Query Helper Methods Transactions Date Date Helper Directory Directory Helper Download Download Helper Email Email Class Email Helper Encrypt Encrypt Class Encryption Encryption Library File File Helper File Uploading File Uploading Class Form Form Helper Form Validation Form Validation FTP FTP Class Functions compatibility_functions common_functions HTML HTML Helper HTML Table HTML Table Class Image Manipulation Image Manipulation Class Inflector Inflector Helper Input Input Class Javascript Javascript Class Language Language Class Language Helper Loader Loader Class Migrations Migrations Class Number Number Helper Output Output Class Pagination Pagination Class Path Path Helper Security Security Class Security Helper Session Session Library Shopping Cart Shopping Cart Class Smiley Smiley Helper String String Helper Template Parser Template Parser Class Text Text Helper Trackback Trackback Class Typography Typography Class Typography Helper Unit Testing Unit Testing Class URI URL User Agent XML XML-RPC and XML-RPC Server Zip Encoding Zip Encoding Class XML-RPC and XML-RPC Server Classes XML Helper User Agent Class URL Helper URI Class
characters

购物车类允许将项目添加到用户浏览您的网站时保持活动的会话。这些物品可以以标准的“购物车”格式检索和显示,允许用户更新数量或从购物车中移除物品。

重要

购物车图书馆已被拒绝,不应使用。目前仅保留用于向后兼容。

请注意,购物车类仅提供核心“购物车”功能。它不提供运输,信用卡授权或其他处理组件。

  • 使用购物车类

    • 什么是行ID?

    • 初始化购物车类

    • 将商品添加到购物车

    • 将多个项目添加到购物车

    • 显示购物车

    • 更新购物车

  • 类参考

使用购物车类

初始化购物车类

重要

Cart类使用CodeIgniter的会话类将购物车信息保存到数据库,因此在使用Cart类之前,您必须按照会话文档中的说明设置数据库表,并在您的application / config / config.php中设置会话首选项文件来利用数据库。

要在控制器构造函数中初始化购物车类,请使用以下$this->load->library()方法:

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

加载后,Cart对象将可用:

$this->cart

注意

Cart类将自动加载和初始化会话类,因此除非您在应用程序的其他地方使用会话,否则不需要加载Session类。

将商品添加到购物车

要将商品添加到购物车,只需将包含商品信息的数组传递给$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)是必需的。如果您忽略其中的任何一项,则数据将不会保存到购物车。第五个索引(选项)是可选的。它旨在用于您的产品具有与之相关联的选项的情况。如上所示,使用数组作为选项。

五个保留索引是:

  • id - 商店中的每个产品都必须具有唯一标识符。通常这将是一个“SKU”或其他这样的标识符。

  • 数量 - 正在购买的数量。

  • 价格 - 物品的价格。

  • 名称 - 项目的名称。

  • 选项 - 识别产品所需的任何其他属性。这些必须通过数组传递。

除上述五个索引外,还有两个保留字:rowid和小计。这些由Cart类内部使用,因此请勿在将数据插入购物车时将这些词用作索引名称。

你的数组可能包含额外的数据。你在数组中包含的任何内容都将存储在会话中。但是,最好将所有产品中的数据标准化,以便使表格中的信息更容易显示。

$data = array(        'id'      => 'sku_123ABC',        'qty'     => 1,        'price'   => 39.95,        'name'    => 'T-Shirt',        'coupon'         => 'XMAS-50OFF');$this->cart->insert($data);

insert()如果您成功插入单个项目,该方法将返回$ rowid。

将多个项目添加到购物车

通过使用多维数组,如下所示,可以在一个动作中将多个产品添加到购物车。在希望允许用户从同一页面上的多个项目中进行选择的情况下,这非常有用。

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

显示cart

要显示购cart,您将创建一个代码类似于下面显示的代码的视图文件。

请注意,这个例子使用了表单助手。

<?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>

更新cart

要更新cart中的信息,您必须将包含行ID和一个或多个预定义属性的数组传递给$this->cart->update()方法。

注意

如果数量设置为零,则该物品将从购物车中移除。

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

您也可以在插入项目时更新您之前定义的任何属性,例如选项,价格或其他自定义字段。

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

什么是行ID?

行ID是在将商品添加到购物车时由购物车代码生成的唯一标识符。创建唯一ID的原因是,可以通过购物车管理具有不同选项的相同产品。

例如,假设有人购买两个相同的T恤(相同的产品ID),但尺寸不同。产品ID(和其他属性)对于两种尺寸都是相同的,因为它们是同一件衬衫。唯一的区别是尺寸。因此,购物车必须具有识别这种差异的手段,以便两种尺寸的衬衫可以独立管理。它通过创建基于产品ID和与其关联的任何选项的唯一“行ID”来实现。

在几乎所有情况下,更新购物车都是用户通过“查看购物车”页面所做的事情,因此对于开发者来说,您不可能永远不必关心“行ID”,除非确保您的“查看购物车”页面在隐藏表单域中包含此信息,并确保update()在提交更新表单时将其传递给方法。请检查上面的“查看购物车”页面的结构以获取更多信息。

类参考

class CI_Cart$product_id_rules = '.a-z0-9_-'

这些是我们用来验证产品ID的正则表达式规则 - 默认情况下是字母数字,短划线,下划线或句点

$product_name_rules = 'w -.:'

这些是我们用来验证产品ID和产品名称的正则表达式规则 - 默认情况下是字母数字,破折号,下划线,冒号或句点

$product_name_safe = TRUE

是否仅允许安全的产品名称。默认为TRUE。

insert([$items = array()])

参数:

$ items(array) - 要插入购物车的项目

返回:

成功为TRUE,失败为FALSE

返回类型:

布尔

  • $ itemsarray) - 要插入购物车的项目

Returns:  TRUE on success, FALSE on failure
Return type:  bool
Insert items into the cart and save it to the session table. Returns TRUE on success and FALSE on failure.

update([$items = array()])

参数:

$ items(array) - 要在购物车中更新的项目

返回:

成功为TRUE,失败为FALSE

返回类型:

布尔

  • $ itemsarray) - 要在购物车中更新的项目

Returns:  TRUE on success, FALSE on failure
Return type:  bool
此方法允许更改给定项目的属性。通常情况下,如果用户在结帐前更改数量,则会从“查看购物车”页面中调用。该数组必须包含每个项目的rowid。

remove($rowid)

参数:

$ rowid(int) - 要从购物车中移除的物品的ID

返回:

成功为TRUE,失败为FALSE

返回类型:

布尔

  • $ rowidint) - 要从购物车中移除的物品的ID

Returns:  TRUE on success, FALSE on failure
Return type:  bool
允许您通过传递`$ rowid`来从购物车中删除商品。

total()

返回:

总金额

返回类型:

INT

total_items()

返回:

购物车中的物品总量

返回类型:

INT

contents([$newest_first = FALSE])

参数:

$ newest_first(bool) - 是否先用最新的项目排列数组

返回:

购物车内容的数组

返回类型:

排列

  • $ newest_firstbool) - 是否先用最新的项目排列数组

Returns:  An array of cart contents
Return type:  array
返回包含购物车中所有内容的数组。您可以通过传递数组来排序返回数组的顺序TRUE将内容从最新到最旧排序,否则将从最旧到最新排序。

get_item($row_id)

参数:

$ row_id(int) - 要检索的行ID

返回:

项目数据的数组

返回类型:

排列

  • $ row_idint) - 要检索的行ID

Returns:  Array of item data
Return type:  array
返回包含与指定行ID匹配的项的数据的数组,如果不存在此类项,则返回FALSE。

has_options($row_id = '')

参数:

$ row_id(int) - 要检查的行ID

返回:

如果选项存在则为TRUE,否则为FALSE

返回类型:

布尔

  • $ row_idint) - 要检查的行ID

Returns:  TRUE if options exist, FALSE otherwise
Return type:  bool
如果购物车中的特定行包含选项,则返回TRUE(布尔值)。这个方法被设计成在`content()`循环中使用,因为你必须将rowid传递给这个方法,如上面的显示购物车示例所示。

product_options([$row_id = ''])

参数:

$ row_id(int) - 行ID

返回:

一系列产品选项

返回类型:

排列

  • $row_id (int) – Row ID

返回:产品选项数组
Return type:  array
Returns an array of options for a particular product. This method is designed to be used in a loop with `contents()`, since you must pass the rowid to this method, as shown in the Displaying the Cart example above.

destroy()

Return type:

void

Previous article: Next article: