Actualizado el lunes, 6 mayo, 2024
Primero debemos instalar el Paquete DarrylCode, obviamente debemos tener una tabla de productos , definir las rutas para las operaciones con el carrito.
¿Cómo programar un carrito de compra o shopping cart en Laravel?
Bien, implementar un carrito de compra en una aplicación web sin usar Laravel es necesario escribir código en PHP muy extenso.
Laravel nos facilita este proceso con el uso de paquetes de terceros que tiene el desarrollo y la lógica implementandos y que podemos adecuar a nuestro desarrollo ya sea en un proyecto personal o profesional.
Luego, un carrito de compra nos permite ir acumulando en sesiones o cookies los productos que hayamos elegido para finalmente mostrar el detalle en una lista de productos con atributos como:
- El número u orden de Item
- El nombre del producto
- Una foto
- Precio
- Cantidad del producto
Finalmente nos permite tener los cálculos de los precios totales, Impuestos.
Empezando a programar el carrito de compra Laravel
Bien ahora empecemos a implementar un carrito de compra en una aplicación Laravel
Contextualizando, debemos tener instalado Laravel con la configuración a una base de datos MYSQL. Además de haber implementando un modelo Productos con su correspodiente migración. Incluimos Bootstrap y la distribución de las plantillas Blade correspondientes.
Paso 1. Desde el perfil del Paquete en GitHub https://github.com/darryldecode/laravelshoppingcart podemos acceder a el proceso de configuración de dicho paquete.
En la terminal digitar el siguiente comando Artisan y presionar enter:
composer require "darryldecode/cart"
Luego realizar la configuración en el archivo config/app.php
Abrimos config/app.php y agregamos la siguiente linea en provider.:
Darryldecode\Cart\CartServiceProvider::class
Agremos el siguiente alias:
'Cart' => Darryldecode\Cart\Facades\CartFacade::class
Opcionalmente podemos configurar:
php artisan vendor:publish --provider="Darryldecode\Cart\CartServiceProvider" --tag="config"
Finalmente pues ya tenemos instalado el paquete listo para usar.
MOSTRAR LOS PRODUCTOS
CONTROLLER:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Producto;
class FrontController extends Controller
{
public function index(){
$productos = Producto::all();
return view('welcome',compact('productos'));
}
}
VISTA:
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-sm-3 bg-light">
@if (count(Cart::getContent()))
<a href="{{route('cart.checkout')}}"> VER CARRITO <span class="badge badge-danger">{{count(Cart::getContent())}}</span></a>
@endif
</div>
<div class="col-sm-9">
<div class="row justify-content-center">
@forelse ($productos as $item)
<div class="col-4 border p-5 mt-5 text-center">
<h1>{{$item->nombre}}</h1>
<P>$ {{$item->precio}}</P>
<form action="{{route('cart.add')}}" method="post">
@csrf
<input type="hidden" name="producto_id" value="{{$item->id}}">
<input type="submit" name="btn" class="btn btn-success" value="ADD TO CART">
</form>
</div>
@empty
@endforelse
</div>
</div>
</div>
</div>
@endsection
RUTA:
Route::get('/', 'FrontController@index' );
CARRITO DE COMPRA:
Nuestro Controller tiene el siguiente código:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Cart;
use App\Producto;
class CartController extends Controller
{
public function add(Request $request){
$producto = Producto::find($request->producto_id);
Cart::add(
$producto->id,
$producto->nombre,
$producto->precio,
1,
array("urlfoto"=>$producto->urlfoto)
);
return back()->with('success',"$producto->nombre ¡se ha agregado con éxito al carrito!");
}
public function cart(){
return view('checkout');
}
public function removeitem(Request $request) {
//$producto = Producto::where('id', $request->id)->firstOrFail();
Cart::remove([
'id' => $request->id,
]);
return back()->with('success',"Producto eliminado con éxito de su carrito.");
}
public function clear(){
Cart::clear();
return back()->with('success',"The shopping cart has successfully beed added to the shopping cart!");
}
}
Definimos nuestras rutas en route/web.php
Route::post('/cart-add', 'CartController@add')->name('cart.add');
Route::get('/cart-checkout','CartController@cart')->name('cart.checkout');
Route::post('/cart-clear', 'CartController@clear')->name('cart.clear');
Route::post('/cart-removeitem', 'CartController@removeitem')->name('cart.removeitem');
Las vistas tienen el siguiente código:
Vista checkout
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-sm-12 bg-light">
@if (count(Cart::getContent()))
<table class="table table-striped">
<thead>
<th>ID</th>
<th>NOMBRE</th>
<th>PRECIO</th>
<th>CANTIDAD</th>
</thead>
<tbody>
@foreach (Cart::getContent() as $item)
<tr>
<td>{{$item->id}}</td>
<td>{{$item->name}}</td>
<td>{{$item->price}}</td>
<td>{{$item->quantity}}</td>
<td>
<form action="{{route('cart.removeitem')}}" method="POST">
@csrf
<input type="hidden" name="id" value="{{$item->id}}">
<button type="submit" class="btn btn-link btn-sm text-danger">x</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
@else
<p>Carrito vacio</p>
@endif
</div>
</div>
</div>
@endsection
[…] Un servidor web. Este tutorial vamos a usar XAMPP, en el siguiente tutorial explicamos como instalar un servidor web con…
[…] está buscando crear proyectos web con Python, Cómo iniciar rápidamente un proyecto Django y una aplicación Django es un buen lugar…
[…] crear un entorno virtual denominado .venv (o el nombre que desee) con el siguiente […]
[…] ver más sobre el comando cat puede ver en nuestros articulos: https://blog.pachahosting.com/como-usar-el-comando-cat-para-escribir-un-texto-en-un-archivo/ y […]
[…] Cómo usar el comando Cat para escribir un texto en un archivo ◀Previous Post Next Post Coming Soon...▶ […]