Jednoduchý e-shop Laravel 5.1 část 5
UPDATE: Začala jsem novy seriál Jednoduchý e-shop Laravel 5.3
Tak konečně začneme pracovat na funkcionalitě a to je konkrétně přidání produktu do košíku. Já jsem se rozhodla , že obsah košíku budu mít uložen v session. Košík bude uložen v poli $id v tomto poli bude odpovídat id produktu v databázi a pro každé id v poli si ještě uložíme množství qty. Kromě toho si ještě do session uložíme celkový počet položek v košíku $cartTotalTakže do routes.php přidáme
1 |
Route::post('/addcart', 'CartController@postAdd'); |
a vytvoříme si CartController.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 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use App\Product; use Session; class CartController extends Controller { public function postAdd(Request $request) { $id = $request->input('product_id'); $qty = $request->input('qty'); $session = $request->session(); $cartData = ($session->get('cart')) ? $session->get('cart') : array(); $cartTotal = ($session->get('total')) ? $session->get('total') : 0; $cartTotal++; if (array_key_exists($id, $cartData)) { $cartData[$id]['qty']++; } else { $cartData[$id] = array( 'qty' => 1 ); } $request->session()->put('cart', $cartData); $request->session()->put('total', $cartTotal); return redirect()->back()->with('message', 'Prodcut Added Successfully!'); } } |
Po přidání zboží do košíku se vrátíme zpět na HomeController, takže zboží se nám sice přidalo do košíku v session, ale vizuelně není nic vidět. Samozřejmě, když si necháte někam vypsat session zobrazíte si v podstatě obsah košíku. Ale v navigačním pruhu máme ikonku pro košík a napadlo mě , co kdybychom si tam nechali zobrazovat počet položek v košíku.
Takže si nejprve opravíme ve viewu master.blade.php zobrazení košíku
1 |
<li><a href="{{ URL::to('cart') }}"><i class="glyphicon glyphicon-shopping-cart"> </i> Košík <span class="badge">{{ $cart_total }}</span></a></li> |
Po této úpravě nám, ale přestane eshop fungovat. Distane chybové hlášení že $cart_total položka není definována. Vpomeňme si jak do každého view posíláme seznam výpisu kategorií pomocí tzv. view composer a zkusíme poslat do view i obsah položky $cart_total.
1 2 3 4 5 6 |
View::composer('*', function($view) { $cart_total = ( app('session')->get('total')) ? app('session')->get('total') : 0; $view->with('category', Category::all()); $view->with('cart_total',$cart_total); }); |
a již nám pěkně se zobrazuje v navigačnín řádku počet položek v košíku. No a na příště si necháme kompletní zobrazení košíku.