Bienvenido a la creación de un Shopping Cart rápido y simple!!!
Crearemos entonces un carrito usando laravel de una manera muy rápida y fácil aquí encontraras todos los pasos correspondientes a el video:
Deberías ya tener el entorno de trabajo pronto, para eso instalas xampp, visual studio code y git con eso listo, comencemos:
composer create-project --prefer-dist laravel/laravel blog "6.*"
composer require "darryldecode/cart"
y en el array de nombre Aliases al final pega esto:
'Cart' => Darryldecode\Cart\Facades\CartFacade::class
php artisan make:model Product -m
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name')->unique();
$table->string('slug')->unique();
$table->string('details')->nullable();
$table->double('price');
$table->double('shipping_cost');
$table->text('description');
$table->integer('category_id');
$table->unsignedInteger('brand_id')->unsigned();
$table->string('image_path');
$table->timestamps();
});
php artisan make: seed ProductsTableSeeder
Product::create([
'name' => 'MacBook Pro',
'slug' => 'macbook-pro',
'details' => '15 pulgadas, 1TB HDD, 32GB RAM',
'price' => 2499.99,
'shipping_cost' => 29.99,
'description' => 'MackBook Pro',
'category_id' => 1,
'brand_id' => 1,
'image_path' => 'macbook-pro.png'
]);
Product::create([
'name' => 'Dell Vostro 3557',
'slug' => 'vostro-3557',
'details' => '15 pulgadas, 1TB HDD, 8GB RAM',
'price' => 1499.99,
'shipping_cost' => 19.99,
'description' => 'Dell Vostro 3557',
'category_id' => 1,
'brand_id' => 2,
'image_path' => 'dell-v3557.png'
]);
Product::create([
'name' => 'iPhone 11 Pro',
'slug' => 'iphone-11-pro',
'details' => '6.1 pulgadas, 64GB 4GB RAM',
'price' => 649.99,
'shipping_cost' => 14.99,
'description' => 'iPhone 11 Pro',
'category_id' => 2,
'brand_id' => 1,
'image_path' => 'iphone-11-pro.png'
]);
Product::create([
'name' => 'Remax 610D Headset',
'slug' => 'remax-610d',
'details' => '6.1 pulgadas, 64GB 4GB RAM',
'price' => 8.99,
'shipping_cost' => 1.89,
'description' => 'Remax 610D Headset',
'category_id' => 3,
'brand_id' => 3,
'image_path' => 'remax-610d.jpg'
]);
Product::create([
'name' => 'Samsung LED TV',
'slug' => 'samsung-led-24',
'details' => '24 pulgadas, LED Display, Resolución 1366 x 768',
'price' => 41.99,
'shipping_cost' => 12.59,
'description' => 'Samsung LED TV',
'category_id' => 4,
'brand_id' => 4,
'image_path' => 'samsung-led-24.png'
]);
Product::create([
'name' => 'Samsung Camara Digital',
'slug' => 'samsung-mv800',
'details' => '16.1MP, 5x Optical Zoom',
'price' => 144.99,
'shipping_cost' => 13.39,
'description' => 'Samsung Digital Camera',
'category_id' => 5,
'brand_id' => 4,
'image_path' => 'samsung-mv800.jpg'
]);
Product::create([
'name' => 'Huawei GR 5 2017',
'slug' => 'gr5-2017',
'details' => '5.5 pulgadas, 32GB 4GB RAM',
'price' => 148.99,
'shipping_cost' => 6.79,
'description' => 'Huawei GR 5 2017',
'category_id' => 2,
'brand_id' => 5,
'image_path' => 'gr5-2017.jpg'
]);
$this->call(ProductsTableSeeder::class);
php artisan migrate --seed
php artisan make: controller CartControllerAquí la función dd () significa volcar datos . Puede probar que los datos vienen o no usando esta función en Laravel. El código después de esta línea no se ejecuta.
Route::get('/', 'CartController@shop')->name('shop');
Route::get('/cart', 'CartController@cart')->name('cart.index');
Route::post('/add', 'CartController@add')->name('cart.store');
Route::post('/update', 'CartController@update')->name('cart.update');
Route::post('/remove', 'CartController@remove')->name('cart.remove');
Route::post('/clear', 'CartController@clear')->name('cart.clear');
Auth::routes();
//Route::get('/home', 'HomeController@index')->name('home');
php artisan serve
@extends('layouts.app')
@section('content')
<div class="container" style="margin-top: 80px">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Home</a></li>
<li class="breadcrumb-item active" aria-current="page">Shop</li>
</ol>
</nav>
<div class="row justify-content-center">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-7">
<h4>Products In Our Store</h4>
</div>
</div>
<hr>
<div class="row">
@foreach($products as $pro)
<div class="col-lg-3">
<div class="card" style="margin-bottom: 20px; height: auto;">
<img src="/images/{{ $pro->image_path }}"
class="card-img-top mx-auto"
style="height: 150px; width: 150px;display: block;"
alt="{{ $pro->image_path }}"
>
<div class="card-body">
<a href=""><h6 class="card-title">{{ $pro->name }}</h6></a>
<p>${{ $pro->price }}</p>
<form action="{{ route('cart.store') }}" method="POST">
{{ csrf_field() }}
<input type="hidden" value="{{ $pro->id }}" id="id" name="id">
<input type="hidden" value="{{ $pro->name }}" id="name" name="name">
<input type="hidden" value="{{ $pro->price }}" id="price" name="price">
<input type="hidden" value="{{ $pro->image_path }}" id="img" name="img">
<input type="hidden" value="{{ $pro->slug }}" id="slug" name="slug">
<input type="hidden" value="1" id="quantity" name="quantity">
<div class="card-footer" style="background-color: white;">
<div class="row">
<button class="btn btn-secondary btn-sm" class="tooltip-test" title="add to cart">
<i class="fa fa-shopping-cart"></i> add to cart
</button>
</div>
</div>
</form>
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app')
@section('content')
<div class="container" style="margin-top: 80px">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">Shop</a></li>
<li class="breadcrumb-item active" aria-current="page">Cart</li>
</ol>
</nav>
@if(session()->has('success_msg'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
{{ session()->get('success_msg') }}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
@endif
@if(session()->has('alert_msg'))
<div class="alert alert-warning alert-dismissible fade show" role="alert">
{{ session()->get('alert_msg') }}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
@endif
@if(count($errors) > 0)
@foreach($errors0>all() as $error)
<div class="alert alert-success alert-dismissible fade show" role="alert">
{{ $error }}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
@endforeach
@endif
<div class="row justify-content-center">
<div class="col-lg-7">
<br>
@if(\Cart::getTotalQuantity()>0)
<h4>{{ \Cart::getTotalQuantity()}} Product(s) In Your Cart</h4><br>
@else
<h4>No Product(s) In Your Cart</h4><br>
<a href="/" class="btn btn-dark">Continue Shopping</a>
@endif
@foreach($cartCollection as $item)
<div class="row">
<div class="col-lg-3">
<img src="/images/{{ $item->attributes->image }}" class="img-thumbnail" width="200" height="200">
</div>
<div class="col-lg-5">
<p>
<b><a href="/shop/{{ $item->attributes->slug }}">{{ $item->name }}</a></b><br>
<b>Price: </b>${{ $item->price }}<br>
<b>Sub Total: </b>${{ \Cart::get($item->id)->getPriceSum() }}<br>
{{-- <b>With Discount: </b>${{ \Cart::get($item->id)->getPriceSumWithConditions() }}--}}
</p>
</div>
<div class="col-lg-4">
<div class="row">
<form action="{{ route('cart.update') }}" method="POST">
{{ csrf_field() }}
<div class="form-group row">
<input type="hidden" value="{{ $item->id}}" id="id" name="id">
<input type="number" class="form-control form-control-sm" value="{{ $item->quantity }}"
id="quantity" name="quantity" style="width: 70px; margin-right: 10px;">
<button class="btn btn-secondary btn-sm" style="margin-right: 25px;"><i class="fa fa-edit"></i></button>
</div>
</form>
<form action="{{ route('cart.remove') }}" method="POST">
{{ csrf_field() }}
<input type="hidden" value="{{ $item->id }}" id="id" name="id">
<button class="btn btn-dark btn-sm" style="margin-right: 10px;"><i class="fa fa-trash"></i></button>
</form>
</div>
</div>
</div>
<hr>
@endforeach
@if(count($cartCollection)>0)
<form action="{{ route('cart.clear') }}" method="POST">
{{ csrf_field() }}
<button class="btn btn-secondary btn-md">Clear Cart</button>
</form>
@endif
</div>
@if(count($cartCollection)>0)
<div class="col-lg-5">
<div class="card">
<ul class="list-group list-group-flush">
<li class="list-group-item"><b>Total: </b>${{ \Cart::getTotal() }}</li>
</ul>
</div>
<br><a href="/shop" class="btn btn-dark">Continue Shopping</a>
<a href="/checkout" class="btn btn-success">Proceed To Checkout</a>
</div>
@endif
</div>
<br><br>
</div>
@endsection<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ $title ?? 'E-COMMERCE STORE' }}</title>
<link rel="stylesheet" href={{ url('css/app.css') }}>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
</head>
<body>
<div id="app">
@include('partials.navbar')
<main class="py-4">
@yield('content')
</main>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</body>
</html><nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark shadow-sm">
<div class="container">
<a class="navbar-brand" href="{{ url('/') }}">
E-COMMERCE STORE
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="{{ route('shop') }}">SHOP</a>
</li>
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle"
href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false"
>
<span class="badge badge-pill badge-dark">
<i class="fa fa-shopping-cart"></i> {{ \Cart::getTotalQuantity()}}
</span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown" style="width: 450px; padding: 0px; border-color: #9DA0A2">
<ul class="list-group" style="margin: 20px;">
@include('partials.cart-drop')
</ul>
</div>
</li>
</ul>
</div>
</div>
</nav>@if(count(\Cart::getContent()) > 0)
@foreach(\Cart::getContent() as $item)
<li class="list-group-item">
<div class="row">
<div class="col-lg-3">
<img src="/images/{{ $item->attributes->image }}"
style="width: 50px; height: 50px;"
>
</div>
<div class="col-lg-6">
<b>{{$item->name}}</b>
<br><small>Qty: {{$item->quantity}}</small>
</div>
<div class="col-lg-3">
<p>${{ \Cart::get($item->id)->getPriceSum() }}</p>
</div>
<hr>
</div>
</li>
@endforeach
<br>
<li class="list-group-item">
<div class="row">
<div class="col-lg-10">
<b>Total: </b>${{ \Cart::getTotal() }}
</div>
<div class="col-lg-2">
<form action="{{ route('cart.clear') }}" method="POST">
{{ csrf_field() }}
<button class="btn btn-secondary btn-sm"><i class="fa fa-trash"></i></button>
</form>
</div>
</div>
</li>
<br>
<div class="row" style="margin: 0px;">
<a class="btn btn-dark btn-sm btn-block" href="{{ route('cart.index') }}">
CART <i class="fa fa-arrow-right"></i>
</a>
<a class="btn btn-dark btn-sm btn-block" href="">
CHECKOUT <i class="fa fa-arrow-right"></i>
</a>
</div>
@else
<li class="list-group-item">Your Cart is Empty</li>
@endif
Las imágenes para descargar DescargaRecuerda copiarlas en la carpeta public\images\ Paso 18: Implementar la funcionalidad Agregar al carrito
Puede ver que hay un botón para cada producto en la página de la tienda. Se utiliza para agregar el producto al carrito. Este es el momento de implementar la lógica para esa funcionalidad. Abra CartController.php y coloque el siguiente código.
public function add(Request$request){ \Cart::add(array( 'id' => $request->id, 'name' => $request->name, 'price' => $request->price, 'quantity' => $request->quantity, 'attributes' => array( 'image' => $request->img, 'slug' => $request->slug ) )); return redirect()->route('cart.index')->with('success_msg', 'Item is Added to Cart!'); }
Ahora solo prepárate para la segunda parte será fácil!!Tenemos que llegar a los 200 likes en el video de youtube que aparece en esta pagina y sale la segunda, lo lamento pero si no es así la gente es muy haragana para los likes y los necesito espero se entienda, el trabajo es duro!!!
Es broma la gente esta dificil, hay que dar sin pensar en recibir es la unica forma de cambiar el mundo o al menos comenzar a hacerlo!!!
Aquí tienes la parte 2 : https://compucenter33.blogspot.com/p/carrito-de-compras-en-laravel-parte-2.html
Formador: Enrique Martínez para compucenter33 en youtube

muchas gracias me ayuda mejor que todo lo que enseña la universidad
ResponderEliminarMe alegro mucho que te sirva un gran saludo para ti!!!
Eliminar