Jednoduchý e-shop Laravel 5.3 část 4 – dokončení objednávky
- Jednoduchý e-shop Laravel 5.3 část 1 – Instalace a databáze
- Jednoduchý e-shop Laravel 5.3 část 2 – databáze seeder a homepage
- Jednoduchý e-shop Laravel 5.3 část 3 – košík a přidání zboží do něj
- Jednoduchý e-shop Laravel 5.3 část 4 – dokončení objednávky
- Jednoduchý e-shop Laravel 5.3 část 5 – odeslání mailu pro objednávku
- Jednoduchý e-shop Laravel 5.3 část 6 – základ administrační části
- Jednoduchý e-shop Laravel 5.3 část 7 – přehled objednávak v administraci
- Jednoduchý e-shop Laravel 5.3 část 8 – detail objednávky v administraci
- Jednoduchý e-shop Laravel 5.3 část 9 – editace produktů v administraci
- Jednoduchý e-shop Laravel 5.3 část 10 – přidání zboží do košíku AJAXEM
- Jednoduchý e-shop Laravel 5.3 část 11 – malé vylepšení modal okno pro přidání do košíku
V dnešní části dokončíme objednávku zboží, které jsme si vložili do košíku. Zobrazíme si obsah košíku a nyní je potřeba přidat kód pro tlačítko objednat.
1 |
php artisan make:controller CheckoutController |
do CheckoutControlleru přidáme zobrazení objednávkového formuláře:
1 2 3 4 5 6 7 |
class CheckoutController extends Controller { public function index() { return view('checkout'); } } |
a samozřejmě připravíme view se zobrazením formuláře pro objednávku do resources/views přidáme checkout.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
@extends('layouts.master') @section('content') @if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <div class="col-md-6"> <form class="form-horizontal" method="post" action="{{ URL::to('checkout') }}"> {{ csrf_field() }} <div class="form-group"> <label for="firstname" class="control-label col-xs-2">Jméno</label> <div class="col-xs-10"> <input type="text" name="firstname" class="form-control" value="{{ old('firstname') }}" id="firstname" placeholder="Jméno"> </div> </div> <div class="form-group"> <label for="lastname" class="control-label col-xs-2">Příjmení</label> <div class="col-xs-10"> <input type="text" name="lastname" class="form-control" value="{{ old('lastname') }}" id="lastname" placeholder="Příjmení"> </div> </div> <div class="form-group"> <label for="street" class="control-label col-xs-2">Ulice, č.p</label> <div class="col-xs-10"> <input type="text" class="form-control" name="street" value="{{ old('street') }}" id="street" placeholder="Ulice, č.p"> </div> </div> <div class="form-group"> <label for="town" class="control-label col-xs-2">Místo</label> <div class="col-xs-10"> <input type="text" class="form-control" name="city" value="{{ old('city') }}" id="city" placeholder="Místo"> </div> </div> <div class="form-group"> <label for="town" class="control-label col-xs-2">PSČ</label> <div class="col-xs-10"> <input type="text" name="psc" class="form-control" value="{{ old('psc') }}" name="psc" id="psc" placeholder="PSČ"> </div> </div> <div class="form-group"> <label for="town" class="control-label col-xs-2">email</label> <div class="col-xs-10"> <input type="email" class="form-control" value="{{ old('email') }}" name="email" id="email" placeholder="email"> </div> </div> <div class="form-group"> <label for="town" class="control-label col-xs-2">Telefon</label> <div class="col-xs-10"> <input type="text" class="form-control" value="{{ old('phone') }}" name="phone" id="phone" placeholder="Telefon"> </div> </div> <div class="form-group"> <div class="col-xs-offset-2 col-xs-10"> <button type="submit" class="btn btn-primary">Odeslat</button> </div> </div> </form> </div> @endsection |
no a aby to fungovalo musíme přidat routu a to konkrétně
1 |
Route::get('/checkout','CheckoutController@index'); |
Teď by se nám po kliknutí na tlačítko objednat měl objevit formulář k vyplnění. Výborně, ale teď ještě vyplnění a odeslání formuláře. Takže do CheckoutControlleru přidáme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public function add(Request $request) { $this->validate($request, [ 'firstname' => 'required', 'lastname' => 'required', 'street' => 'required', 'city' => 'required', 'psc' => 'required', 'email' => 'required|email', 'phone' => 'required' ]); $customer = new Customer($request->all()); $customer->save(); $customer_id = $customer->id; $order = new Order(['user_id' => $customer_id, 'status' => 0]); $order->save(); $order_id = $order->id; $cartData = $request->session()->get('cart'); $id = 1; foreach ($cartData as $key => $value) { $product = Product::where('id', '=', $key)->get()->toArray(); $price = $product['0']['price']; $order_product = new Order_product([ 'order_id' => $order_id, 'product_id' => $key, 'quantity' => $value['qty'], 'price' => $price, ]); $order_product->save(); $id++; } session()->forget('cart'); return redirect('/')->with('message', 'Vaše objednávka byla odeslána'); } |
Aby to fungovalo musíme ještě vytvořit model Customer, Order a Order_product
1 2 3 |
php artisan make:model Customer php artisan make:model Order php artisan make:model Order_product |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Customer extends Model { protected $fillable = ['firstname', 'lastname', 'street', 'city','psc','email','phone']; } class Order extends Model { protected $fillable = ['user_id', 'status']; } class Order_product extends Model { protected $table = 'order_product'; protected $fillable = ['order_id', 'product_id','quantity', 'price']; } |
Tak a teď už lze objednávku dokončit