diff options
author | Andrey Andreev <narf@devilix.net> | 2014-03-14 16:42:41 +0100 |
---|---|---|
committer | Andrey Andreev <narf@devilix.net> | 2014-03-14 16:42:41 +0100 |
commit | 395e68f490daf2d613dc921c59f090e58faf55f9 (patch) | |
tree | ba1f14bdcadc6eec7af2068a0f8f3221cfba7021 | |
parent | b79d75d21fc9438679ed0552b8cd4042db80b8f6 (diff) | |
parent | 2702a3b647785c06bf21ba0b6b36cacef2f8ee1f (diff) |
Merge pull request #2939 from aanbar/cart_update
Removed the requirement of quantity to trigger cart update.
-rw-r--r-- | system/libraries/Cart.php | 49 | ||||
-rw-r--r-- | user_guide_src/source/changelog.rst | 2 | ||||
-rw-r--r-- | user_guide_src/source/libraries/cart.rst | 6 |
3 files changed, 29 insertions, 28 deletions
diff --git a/system/libraries/Cart.php b/system/libraries/Cart.php index 5b05974e4..cd46a6ef6 100644 --- a/system/libraries/Cart.php +++ b/system/libraries/Cart.php @@ -282,10 +282,10 @@ class CI_Cart { // You can either update a single product using a one-dimensional array, // or multiple products using a multi-dimensional one. The way we - // determine the array type is by looking for a required array key named "id". + // determine the array type is by looking for a required array key named "rowid". // If it's not found we assume it's a multi-dimensional array $save_cart = FALSE; - if (isset($items['rowid'], $items['qty'])) + if (isset($items['rowid'])) { if ($this->_update($items) === TRUE) { @@ -296,7 +296,7 @@ class CI_Cart { { foreach ($items as $val) { - if (is_array($val) && isset($val['rowid'], $val['qty'])) + if (is_array($val) && isset($val['rowid'])) { if ($this->_update($val) === TRUE) { @@ -332,37 +332,38 @@ class CI_Cart { protected function _update($items = array()) { // Without these array indexes there is nothing we can do - if ( ! isset($items['qty'], $items['rowid'], $this->_cart_contents[$items['rowid']])) + if ( ! isset($items['rowid'], $this->_cart_contents[$items['rowid']])) { return FALSE; } // Prep the quantity - $items['qty'] = (float) $items['qty']; - - // Is the quantity zero? If so we will remove the item from the cart. - // If the quantity is greater than zero we are updating - if ($items['qty'] == 0) - { - unset($this->_cart_contents[$items['rowid']]); - } - else + if (isset($items['qty'])) { - // find updatable keys - $keys = array_intersect(array_keys($this->_cart_contents[$items['rowid']]), array_keys($items)); - // if a price was passed, make sure it contains valid data - if (isset($items['price'])) + $items['qty'] = (float) $items['qty']; + // Is the quantity zero? If so we will remove the item from the cart. + // If the quantity is greater than zero we are updating + if ($items['qty'] == 0) { - $items['price'] = (float) $items['price']; - } - - // product id & name shouldn't be changed - foreach (array_diff($keys, array('id', 'name')) as $key) - { - $this->_cart_contents[$items['rowid']][$key] = $items[$key]; + unset($this->_cart_contents[$items['rowid']]); + return TRUE; } + } + + // find updatable keys + $keys = array_intersect(array_keys($this->_cart_contents[$items['rowid']]), array_keys($items)); + // if a price was passed, make sure it contains valid data + if (isset($items['price'])) + { + $items['price'] = (float) $items['price']; } + // product id & name shouldn't be changed + foreach (array_diff($keys, array('id', 'name')) as $key) + { + $this->_cart_contents[$items['rowid']][$key] = $items[$key]; + } + return TRUE; } diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst index 36ddbc92e..6f246e3a0 100644 --- a/user_guide_src/source/changelog.rst +++ b/user_guide_src/source/changelog.rst @@ -317,7 +317,7 @@ Release Date: Not Released - Added unicode support for product names. - Added support for disabling product name strictness via the ``$product_name_safe`` property. - Changed ``insert()`` method to auto-increment quantity for an item when inserted twice instead of resetting it. - - Changed ``update()`` method to support updating all properties attached to an item. + - Changed ``update()`` method to support updating all properties attached to an item and not to require 'qty'. - :doc:`Image Manipulation Library <libraries/image_lib>` changes include: diff --git a/user_guide_src/source/libraries/cart.rst b/user_guide_src/source/libraries/cart.rst index d7d495967..bedea4dbf 100644 --- a/user_guide_src/source/libraries/cart.rst +++ b/user_guide_src/source/libraries/cart.rst @@ -205,8 +205,8 @@ 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()`` -method. +containing the Row ID and one or more pre-defined properties to the +``$this->cart->update()`` method. .. note:: If the quantity is set to zero, the item will be removed from the cart. @@ -318,7 +318,7 @@ Class Reference This method permits changing the properties of a given item. Typically it is called from the "view cart" page if a user makes changes to the quantity before checkout. That array must contain the rowid - and qty for each item. + for each item. .. method:: remove($rowid) |