summaryrefslogtreecommitdiffstats
path: root/user_guide_src/source/libraries/cart.rst
diff options
context:
space:
mode:
authorDerek Jones <derek.jones@ellislab.com>2011-10-05 20:34:52 +0200
committerDerek Jones <derek.jones@ellislab.com>2011-10-05 20:34:52 +0200
commit8ede1a2ecbb62577afd32996956c5feaf7ddf9b6 (patch)
tree2e960ec3b416b477f40bb546371f2d486f4a22f0 /user_guide_src/source/libraries/cart.rst
parentd1ecd5cd4ae6ab5d37df9fbda14b93977b9e743c (diff)
replacing the old HTML user guide with a Sphinx-managed user guide
Diffstat (limited to 'user_guide_src/source/libraries/cart.rst')
-rw-r--r--user_guide_src/source/libraries/cart.rst294
1 files changed, 294 insertions, 0 deletions
diff --git a/user_guide_src/source/libraries/cart.rst b/user_guide_src/source/libraries/cart.rst
new file mode 100644
index 000000000..2384e92b9
--- /dev/null
+++ b/user_guide_src/source/libraries/cart.rst
@@ -0,0 +1,294 @@
+###################
+Shopping Cart Class
+###################
+
+The Cart Class permits items to be added to a session that stays active
+while a user is browsing your site. These items can be retrieved and
+displayed in a standard "shopping cart" format, allowing the user to
+update the quantity or remove items from the cart.
+
+Please note that the Cart Class ONLY provides the core "cart"
+functionality. It does not provide shipping, credit card authorization,
+or other processing components.
+
+.. contents:: Page Contents
+
+Initializing the Shopping Cart Class
+====================================
+
+.. important:: The Cart class utilizes CodeIgniter's :doc:`Session
+ Class <sessions>` to save the cart information to a database, so
+ before using the Cart class you must set up a database table as
+ indicated in the :doc:`Session Documentation <sessions>`, and set the
+ session preferences in your application/config/config.php file to
+ utilize a database.
+
+To initialize the Shopping Cart Class in your controller constructor,
+use the $this->load->library function::
+
+ $this->load->library('cart');
+
+Once loaded, the Cart object will be available using::
+
+ $this->cart
+
+.. note:: The Cart Class will load and initialize the Session Class
+ automatically, so unless you are using sessions elsewhere in your
+ application, you do not need to load the Session class.
+
+Adding an Item to The Cart
+==========================
+
+To add an item to the shopping cart, simply pass an array with the
+product information to the $this->cart->insert() function, as shown
+below::
+
+ $data = array(
+ 'id' => 'sku_123ABC',
+ 'qty' => 1,
+ 'price' => 39.95,
+ 'name' => 'T-Shirt',
+ 'options' => array('Size' => 'L', 'Color' => 'Red')
+ );
+
+ $this->cart->insert($data);
+
+.. important:: The first four array indexes above (id, qty, price, and
+ name) are **required**. If you omit any of them the data will not be
+ saved to the cart. The fifth index (options) is optional. It is intended
+ to be used in cases where your product has options associated with it.
+ Use an array for options, as shown above.
+
+The five reserved indexes are:
+
+- **id** - Each product in your store must have a unique identifier.
+ Typically this will be an "sku" or other such identifier.
+- **qty** - The quantity being purchased.
+- **price** - The price of the item.
+- **name** - The name of the item.
+- **options** - Any additional attributes that are needed to identify
+ the product. These must be passed via an array.
+
+In addition to the five indexes above, there are two reserved words:
+rowid and subtotal. These are used internally by the Cart class, so
+please do NOT use those words as index names when inserting data into
+the cart.
+
+Your array may contain additional data. Anything you include in your
+array will be stored in the session. However, it is best to standardize
+your data among all your products in order to make displaying the
+information in a table easier.
+
+The insert() method will return the $rowid if you successfully insert a
+single item.
+
+Adding Multiple Items to The Cart
+=================================
+
+By using a multi-dimensional array, as shown below, it is possible to
+add multiple products to the cart in one action. This is useful in cases
+where you wish to allow people to select from among several items on the
+same page.
+
+::
+
+ $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);
+
+Displaying the Cart
+===================
+
+To display the cart you will create a :doc:`view
+file </general/views>` with code similar to the one shown below.
+
+Please note that this example uses the :doc:`form
+helper </helpers/form_helper>`.
+
+::
+
+ <?php echo form_open('path/to/controller/update/function'); ?>
+
+ <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>
+
+Updating The Cart
+=================
+
+To update the information in your cart, you must pass an array
+containing the Row ID and quantity to the $this->cart->update()
+function:
+
+.. note:: If the quantity is set to zero, the item will be removed from
+ the cart.
+
+::
+
+ $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);
+
+What is a Row ID?
+*****************
+
+The row ID is a unique identifier that is
+generated by the cart code when an item is added to the cart. The reason
+a unique ID is created is so that identical products with different
+options can be managed by the cart.
+
+For example, let's say someone buys two identical t-shirts (same product
+ID), but in different sizes. The product ID (and other attributes) will
+be identical for both sizes because it's the same shirt. The only
+difference will be the size. The cart must therefore have a means of
+identifying this difference so that the two sizes of shirts can be
+managed independently. It does so by creating a unique "row ID" based on
+the product ID and any options associated with it.
+
+In nearly all cases, updating the cart will be something the user does
+via the "view cart" page, so as a developer, it is unlikely that you
+will ever have to concern yourself with the "row ID", other then making
+sure your "view cart" page contains this information in a hidden form
+field, and making sure it gets passed to the update function when the
+update form is submitted. Please examine the construction of the "view
+cart" page above for more information.
+
+
+Function Reference
+==================
+
+$this->cart->insert();
+**********************
+
+Permits you to add items to the shopping cart, as outlined above.
+
+$this->cart->update();
+**********************
+
+Permits you to update items in the shopping cart, as outlined above.
+
+$this->cart->total();
+*********************
+
+Displays the total amount in the cart.
+
+$this->cart->total_items();
+****************************
+
+Displays the total number of items in the cart.
+
+$this->cart->contents();
+************************
+
+Returns an array containing everything in the cart.
+
+$this->cart->has_options(rowid);
+*********************************
+
+Returns TRUE (boolean) if a particular row in the cart contains options.
+This function is designed to be used in a loop with
+$this->cart->contents(), since you must pass the rowid to this function,
+as shown in the Displaying the Cart example above.
+
+$this->cart->product_options(rowid);
+*************************************
+
+Returns an array of options for a particular product. This function is
+designed to be used in a loop with $this->cart->contents(), since you
+must pass the rowid to this function, as shown in the Displaying the
+Cart example above.
+
+$this->cart->destroy();
+***********************
+
+Permits you to destroy the cart. This function will likely be called
+when you are finished processing the customer's order.