Welcome Guest, Not a member yet? Register   Sign In
Problems with the cart class
#8

[eluser]nelson.wells[/eluser]
I've written a better solution that someone may be interested in. This will let you update any index in the cart class (that is not an array, it doesn't do that yet). You can follow progress at the BitBucket project or read more about it on my blog.

Code:
class MY_Cart extends CI_Cart
    {
        function __construct()
        {
            parent::CI_Cart();
        }
        
        function update_all($items = array())
        {
            // Was any cart data passed?
            if ( ! is_array($items) OR count($items) == 0)
            {
                return false;
            }
            
            // 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 "rowid".
            // If it's not found we assume it's a multi-dimensional array    
            if (isset($items['rowid']))
            {    
                $this->_update_item($items);
            }
            else
            {
                foreach($items as $item)
                {
                    $this->_update_item($item);
                }
            }
            
            $this->_save_cart();
        }
        
        /*
         * Function: _update_item
         * Param: Array with a rowid and information about the item to be updated
         *             such as qty, name, price, custom fields.
         */
        function _update_item($item)
        {
            foreach($item as $key => $value)
            {
                //don't allow them to change the rowid
                if($key == 'rowid')
                {
                    continue;
                }
                
                //do some processing if qty is
                //updated since it has strict requirements
                if($key == "qty")
                {                    
                    // Prep the quantity
                    $items['qty'] = preg_replace('/([^0-9])/i', '', $items['qty']);
            
                    // Is the quantity a number?
                    if ( ! is_numeric($items['qty']))
                    {
                        continue;
                    }
                    
                    // Is the new quantity different than what is already saved in the cart?
                    // If it's the same there's nothing to do
                    if ($this->_cart_contents[$items['rowid']]['qty'] == $items['qty'])
                    {
                        continue;
                    }
            
                    // 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']]);
                        continue;
                    }
                }
                
                $this->_cart_contents[$item['rowid']][$key] = $value;
            }
        }
    }


Messages In This Thread
Problems with the cart class - by El Forum - 03-18-2010, 09:59 AM
Problems with the cart class - by El Forum - 03-25-2010, 05:58 AM
Problems with the cart class - by El Forum - 03-25-2010, 08:29 AM
Problems with the cart class - by El Forum - 03-25-2010, 08:35 AM
Problems with the cart class - by El Forum - 03-25-2010, 09:03 AM
Problems with the cart class - by El Forum - 04-02-2010, 04:35 PM
Problems with the cart class - by El Forum - 04-02-2010, 08:19 PM
Problems with the cart class - by El Forum - 04-13-2010, 10:57 PM
Problems with the cart class - by El Forum - 11-01-2010, 04:26 AM



Theme © iAndrew 2016 - Forum software by © MyBB