Jednoduchý e-shop Laravel 5.1 část 6
UPDATE: Začala jsem novy seriál Jednoduchý e-shop Laravel 5.3
Takže dnes si zprovozníme zobrazení nákupního košíku. Nahoře v navigačním menu je ikona košíku a pokud na ni klikneme objeví se nám chybové hlášení. Musíme si tedy nejprve vytvořit routu
1 |
Route::get('/cart','CartController@index'); |
A nyní je potřeba do CartControlleru přidat metodu index pro zobrazení obsahu košíku
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public function index(Request $request) { $cartData = $request->session()->get('cart'); $cart = []; $sum = 0; foreach ($cartData as $key => $value) { $product = Product::where('id','=',$key)->get()->toArray(); $cart_item['item'] = $product['0']; $cart_item['total_price'] = $value['qty']*$product['0']['price']; $cart_item['qty'] = $value['qty']; $sum = $sum + $cart_item['total_price']; array_push($cart,$cart_item); } return view('cart')->with('cart',$cart)->with('sum',$sum); } |
a ještě musíme přidat view pro zobrazení obsahu košíku
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 |
@extends('layouts.master') @section('title','HomePage'); @section('content') <table id="cart" class="table table-hover table-condensed"> <thead> <tr> <th style="width:50%">Product</th> <th style="width:10%">Cena</th> <th style="width:8%">Množství</th> <th style="width:22%" class="text-center">Součet</th> <th style="width:10%"></th> </tr> </thead> <tbody> @foreach ($cart as $cart_item) <tr> <td data-th="Product"> <div class="row"> <div class="col-sm-2 hidden-xs"><img src="http://placehold.it/100x100" alt="..." class="img-responsive"/></div> <div class="col-sm-10"> <h4 class="nomargin">{{ $cart_item['item']['name'] }}</h4> <p>{{ $cart_item['item']['description'] }}</p> </div> </div> </td> <td data-th="Price">{{ number_format($cart_item['item']['price'], 2, ',', ' ').' Kč' }}</td> <td data-th="Quantity"> <input type="number" class="form-control text-center" value="{{ $cart_item['qty'] }}"> </td> <td data-th="Subtotal" class="text-center">{{ number_format($cart_item['total_price'], 2, ',', ' ').' Kč' }}</td> <td class="actions" data-th=""> {{--<button class="btn btn-info btn-sm"><i class="fa fa-refresh"></i></button>--}} <a href="{{ URL::to('/cartdelete/'.$cart_item['item']['id'] ) }} " class="btn btn-danger btn-sm"><i class="fa fa-trash-o"></i></a> </td> </tr> @endforeach </tbody> <tfoot> <tr class="visible-xs"> <td class="text-center"><strong>{{ $sum }}</strong></td> </tr> <tr> <td><a href="{{ URL::to('/') }}" class="btn btn-warning"><i class="fa fa-angle-left"></i> Pokračovat v nákupu</a></td> <td colspan="2" class="hidden-xs"></td> <td class="hidden-xs text-center"><strong>{{ number_format($sum, 2, ',', ' ').' Kč' }}</strong></td> <td><a href="{{ URL::to('checkout') }}" class="btn btn-success btn-block">Objednat <i class="fa fa-angle-right"></i></a></td> </tr> </tfoot> </table> @stop |
Pokud chi zboží z košíku smazat pomocí červené ikonky koše musím opět do přidat routu
1 |
Route::get('/cartdelete/{id}','CartController@delete'); |
a do CartControlleru přidat metodu delete
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public function delete($id, Request $request) { $session = $request->session(); $cartData = $session->get('cart'); if (array_key_exists($id, $cartData)) unset ($cartData[$id]); $request->session()->put('cart', $cartData); $cartTotal = 0; foreach($cartData as $cartItem) { $cartTotal = $cartTotal+$cartItem['qty']; } $request->session()->put('total', $cartTotal); return back(); } |
No a na příště nám zbývá snad jen odeslání objednávky a náš mini-eshop je hotov. Samozřejmě jenom s úplně základní funkcionalitou