flexi cart is a free shopping cart library for use with the CodeIgniter 2.0+ framework.
CodeIgniter already includes a basic shopping cart library that allows you to add items to a cart and display it - but sadly, thats about it.
For anyone trying to build a complete shopping cart store, the native library is just not going to cut it. This is where flexi cart comes to the rescue, offering a plethora of flexible features that can be customised to behave and function the way you need them to.
The features in flexi cart are designed to be modularised, so that you can use bits and pieces of different features without needing to setup other features that are not required.
If you want a cart that can calculate shipping, but don't need a discount system, simply delete the table and disable the feature via the cart config.
If you want to use the item stock feature, but wish to add and remove the stock yourself, simply change a setting via the cart config.
The idea of flexi cart is to let you build the site, the way you want it built, rather than being confined to a one path design flow.
It's likely that 90% of the pages on your site will not require the complete functionality of flexi cart, which would result in wasting memory resources loading parts of the library that would not be used.
To solve this, the functionality of flexi cart is split into three different libraries all with a different intended purpose.
Whilst flexi cart offers a huge number of features, it is not intended to be an all-in-one out-of-the-box cart, therefore there are elements that are required by an e-commerce site that are not included in the library.
To some degree, it can be looked at as a limitation, but it was purposely designed this way to actually maintain its key feature - flexibility.
The most obvious missing element is that there are no tables in flexi cart for inserting an items main data into. There are tables for item stock, item shipping and item taxes, but they are all designed to have a many-to-one relationship with a custom item table, i.e. many tax rates can be set to one item.
The reason there is no item table is that every site tends to be quite specific with the type of data that needs to be stored, this then becomes even more varied depending on how item category and attribute tables are related to the item table.
Therefore, the design of these elements was kept out of the library and up to the developer.
Whilst flexi cart is perfectly capable of connecting to payment gateways (Paypal etc.), there are no inbuilt functions to do this for you.
I'll leave this one open for the community to provide.
Once again, flexi cart is capable of having its shipping values updated via a third party provider (FedEx etc.), however there are no inbuilt functions for this.
Again, I'll leave this one open for the community to provide.
Whilst flexi cart provides the functionality to set locations to control data within the cart, this data is not provided for you.