Jednoduchý e-shop Laravel 5.3 část 9 – editace produktů v administraci
Takže dnes bych chtěla tento jednoduchý e-shop dokončit a to administrací produktů.
Takže dnes bych chtěla tento jednoduchý e-shop dokončit a to administrací produktů.
Nyní by bylo vhdoné, abychom si v administraci zobrazili podrobnosti ke každé objednávce. Šablona v administraci má u čísla objednávky odkaz na detail dané objednávky, takže nezbývá než to doprogramovat.
Dnešní část kodu mi dala asi nejvíce zabrat, protože se zde používají tzv. relationships. Takže po přihlášení do administrace budu chtít asi zobrazit přehled všech objednávek s informací o objednateli, stavu a cene objednávky.
Takže teď začneme tvořit administraci pro náš jednoduchý e-shop. Využijeme vestavěnou adminstraci v Laravelu 5.3. Před započetím je potřeba si zazálohovat stávající e-shop. protože dojde k přepsání některých souborů a my si pak jejich obsah obnovíme ze zálohy.
Dnes si jenom trochu rozšíříme funkcionalitu pro odeslání objednávky. Bylo by dobré, kdyby provozovatel e-shopu byl o provedené objednávce informován i mailem. Takže uložení objednávky rozšíříme o odeslání mailu. Využijeme k tomu zcela novou funkcionalitu, kterou má Laravel od verze 5.3 a to tzv. mailables viz dokumentace.
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.
Pokračujeme tedy dál no homepage máme zobrazení košíku a teď bychom chtěli zboží přidat do košíku a po té zobrazit zboží v košíku. Obsah košíku uložíme do session . Takže do routes/web.php si přidáme dvě routy a to pro přidání zboží do košíku a také pro zobrazení košíku.
1 2 |
Route::post('/addcart', 'CartController@postAdd'); Route::get('/cart','CartController@index'); |
a vytvoříme si CartController
1 |
php artisan make:controller CartController |
a upravíme takto
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 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Product; class CartController extends Controller { public function index(Request $request) { $cartData = $request->session()->get('cart'); $cart = []; $sum = 0; if ($request->session()->has('cart')) { 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); } public function postAdd(Request $request) { $id = $request->input('product_id'); $session = $request->session(); $cartData = ($session->get('cart')) ? $session->get('cart') : array(); if (array_key_exists($id, $cartData)) { $cartData[$id]['qty']++; } else { $cartData[$id] = array( 'qty' => 1 ); } $request->session()->put('cart', $cartData); return redirect()->back()->with('message', 'Prodcut Added Successfully!'); } } |
funkce postAdd nám slouží pro přidání zboží z homepage do košíku a a index nám zobrazí aktuální obsah košíku. Ještě musíme připravit…
Dazabázi máme vytvořenou. Abychom mohli vyvíjet aplikaci naplním si produkty daty. K tomu využiji další pěknou feature, kterou Laravel má a to database seeder. Takže si v database/seeds upravíme DatabaseSeeder.php a to takto
1 2 3 4 |
public function run() { $this->call(ProductsTableSeeder::class); } |
Dále si ve stejném adresáři vytvoříme ProductsTableSeeder.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 |
<?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; use App\Product; class ProductsTableSeeder extends Seeder { public function run() { DB::table('products')->delete(); Product::create(array( 'name'=>'Náhrdelník swarowski', 'description'=>'Nový luxusní náhrdelník swarovski', 'slug'=>'nahrdelnik-swarowski', 'price'=>'1001.40', )); Product::create(array( 'name'=>'Prstýnek chirurgická ocel', 'description'=>'Potěší každou slečnu nebo paní.', 'slug'=>'prstynek-chirurgicka-ocel', 'price'=>'100.50', )); Product::create(array( 'name'=>'Náramek pro meditaci', 'description'=>'Meditační náramek přímo z Indie', 'slug'=>'meditacni-naramek', 'price'=>'250', )); } } |
a nyní bychom už mohli pustit seeder
1 |
php artisan db:seed |
Ovšem ten nám skončí chybou ClassProductcTableSeeder does not exists. Ovšem my ale víme, že existuje. Problém je pouze v autoloadu takže provedeme
1 |
composer dump-autoload |
A zkusíme seeder znovu spustit. Ops opět…
Po krátké přestávce ( v mezidobí jsem pronikala do tajů záludného prgramovacího jazyka C) jsem se vrátila k mému původnímu e-shopu ( viz. seriál a drobný update). Jak už to tak bývá, zjistila jsem, že ne zrovna všechno v něm bylo ideální. Protože se blíží vánoce a kromě zaměstnání, úklidu domácnosti, pečení cukroví a nákupu dárků, nemám v podstatě nic na práci, rozhodla jsem se svůj nehezký kód přepracovat a to s využitím nejnovější verze Laravel framewroku a to konkrétně aktuální verze 5.3….
UPDATE: Začala jsem novy seriál Jednoduchý e-shop Laravel 5.3 Po čase jsem se vrátila ke svému jednoduchému e-shopu na frameworku Laravel. Pro jednu známou jsem potřebovala jednoduchý e-shop na prodej jejich výrobků a tak jsem oprášila svůj zdrojový kód ze seriálu a updatovala jsem na Laravel 5.3. Oproti původnímu seriálu jsem vypustila kategorie (v požadovaném e-shopu je nepotřebuji, prodává jen pár svých kousků). Zato jsem přidala administraci s využitím vestavěné autentizace ve frameworku. Vytvořila jsem si vlastní middleware pro přihlášení do…