cyvelnet / laravel-easycart
A simple & easy to use yet powerful laravel cart solution
Requires
- php: ^5.6|^7.0|^8.0
- illuminate/support: ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0
Requires (Dev)
- mockery/mockery: 0.9.*
- orchestra/testbench: 3.4.*
- phpunit/phpunit: 5.7.* || ^8.0 || ^9.0
README
This project is still under development, it is far from ready for production.
Installation
Require this package with composer using the following command:
composer require cyvelnet/laravel-easycart
After updating composer, add the ServiceProvider to the providers array in config/app.php
Cyvelnet\EasyCart\EasyCartServiceProvider::class,
and register Facade
And optionally add a new line to the aliases
array:
'EasyCart' => Cyvelnet\EasyCart\Facades\EasyCart::class,
Usage
EasyCart::add()
Add new product or update quantity on existing cart item
// Add product to cart EasyCart::add($id, $name, $price, $qty); // Add product to cart with attributes & weight EasyCart::add($id, $name, $price, $qty, $attributes = [], $weight); // Add multiple products EasyCart::add([ [ 'id' => '1' 'name' => 'Product 1' 'price' => '199.99' 'qty' => '1', 'attributes' => ['color' => 'red'], 'weight' => 0.5 ], [ 'id' => '2' 'name' => 'Product 2' 'price' => '299.99' 'qty' => '1' ] ]);
EasyCart::update()
Update cart item
An unique rowId is assigned to each cart item, use
getRowId()on cart item to retrieves rowId
*
// update qty EasyCart::update($rowId, $qty); // update other EasyCart::update($rowId, [ 'attributes' => ['color' => 'green'], 'qty' => 2, 'price' => 399.99 ]);
EasyCart::remove()
Remove an item from cart
EasyCart::remove($rowId);
EasyCart::get()
Get a row by rowId
EasyCart::get($rowId);
EasyCart::destroy()
Wipe cart completely
EasyCart::destroy();
EasyCart::qty()
Get the total number of quantity in cart.
EasyCart::qty();
EasyCart::subtotal()
Get the cart subtotal before a condition value is being added, use EasyCart::total()
to retrieves the final price
EasyCart::subtotal();
EasyCart::total()
Get the cart total with condition values calculated
EasyCart::total();
EasyCart::items()
Get the cart items EasyCart::content() is an aliase to EasyCart::items()
, Cyvelnet\EasyCart\Collections\CartItemCollection
instance is return
EasyCart::items()
EasyCart::weight()
Get the cart total weight
EasyCart::weight()
Filtering
EasyCart::find()
Find a cart item by product id, a Cyvelnet\EasyCart\CartItem
instance is return
EasyCart::find($id);
EasyCart::findByIds()
Find a cart item by an array of ids, a Cyvelnet\EasyCart\Collections\CartItemCollection
instance is return
EasyCart::findByIds($ids = []);
Condition
EasyCart support condition, which is essential to ECommerces application, either provides discount or add additional prices are supported.
EasyCart::condition()
Adding a condition is simple, just instantiate a Cyvelnet\EasyCart\CartCondition object and you are ready to go.
// Add a 50% discount to cart $fiftyPercentDiscount = new CartCondition($name = '$50 Off', $value = '-50') // you have to use a - (minus sign) to indicate a discount is expected EasyCart::condition($fiftyPercentDiscount);
Sometimes you want to only give an discount to only to a selected range of products instead of apply to the whole cart, it is easy
$fiftyPercentDiscount = new CartCondition($name = '$50 Off', $value = '-50'); $fiftyPercentDiscount->onProduct([1,2,3,4]); EasyCart::condition($fiftyPercentDiscount);
Life is not always easy, what if you need to give an discount of 20% but with a maximum up to $50 ?
$fiftyPercentDiscount = new CartCondition($name = '20% Off', $value = '-20'); $fiftyPercentDiscount->maxAt(50); EasyCart::condition($fiftyPercentDiscount);
EasyCart::removeConditionByType()
Remove condition by type
EasyCart::removeConditionByType($type);
EasyCart::removeConditionByName()
Remove condition by name
EasyCart::removeConditionByName($name);
Instances
EasyCart support multiple instances, no extra configuration is needed, just point it to instance and it works the same as normal
EasyCart::instance('wishlist')->add($id, $name, $price, $qty); EasyCart::instance('wishlist')->destroy();
Instances Expiration
Sometimes a cart expiration is needed, maybe for reservation, or other usage, this is handful in EasyCart
// create a new instances with 15 minutes expiration EasyCart::instance('reservation', \Carbon::now()->addMinutes(15));
To verify whether a cart is expired, use EasyCart::isExpired()
// check if a cart is expired EasyCart::instance('reservation')->isExpired();
Since you may expire a cart, you might want to make a countdown too
EasyCart::instance('reservation')->expirationTimestamp();