Jednoduchý e-shop Laravel 5.3 část 2 – databáze seeder a homepage
- 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
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 chybka Class App\Produxt not found. Jistě v ProductsTableSeeder.php používáme Product model, ten ovšem nenáme vytvořen takže
1 |
php artisan make:model Product |
A konečně spustíme seeder. A databázi produktů máme naplněnou.
Teď by to chtělo náš minieshop ještě trochu oživit. Vytvoříme se teda jednoduchou homeage vytvoříme si HomeController pomocí
1 |
php artisan make:controller HomeController |
a HomeController upravíme takto:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Product; class HomeController extends Controller { public function index() { $products = Product::all(); return view('home', ['products' => $products]); } } |
samozřejmě ještě potřebujeme vytvořit routu a to editaci routes/web.php na
1 |
Route::get('/', 'HomeController@index'); |
Teď nám ještě chybí příslušné view, takže v resources/view vytvoříme home.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 |
@extends('layouts.master') @section('title','HomePage'); @section('content') @if(session('message')) <div id="success-alert" class="alert alert-success"> <a href="#" class="close" data-dismiss="alert" aria-label="close">×</a> {{ session('message') }} </div> @endif <div class="row"> @foreach ($products->chunk(3) as $products) <div class="row"> @foreach ($products as $product) <div class="col-md-4"> <div class="image"> <img src="{{ url('/products/'.$product->image) }}" alt="{{ $product->name }}"> </div> <div class="description"> <h3>{{ $product->name }}</h3> <p>{{ $product->description }}</p> </div> <div class="price">{{ $product->price }} Kč</div> <div class="buy"> <form method="POST" action="{{ URL::to('addcart') }}" class="form-inline" role="form"> {{ csrf_field() }} <input type="hidden" name="product_id" value="{{ $product->id }}"> <button type="submit" class="btn btn-primary">Koupit</button> </form> </div> </div> @endforeach </div> @endforeach </div> @stop |
a jistě jste si všimli že potřebujeme vytvořit v resources/views ještě adresář layouts a v něm master.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 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="Jednoduchý eshop Laravel 5.3"> <meta name="author" content="Mamusha"> <link rel="icon" href="../../favicon.ico"> <title>@yield('title', 'Jednoduchý shop Laravel 5.3')</title> <!-- Bootstrap core CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet"> <!-- Custom styles for this template --> <link href="{{ URL::asset('css/style.css') }}" rel="stylesheet"> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <!-- Fixed navbar --> <nav class="navbar navbar-default navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="{{ URL::to('/') }}">MaMusha shop</a> </div> <div id="navbar" class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li class="active"><a href="{{ URL::to('/') }}">Úvodní strana</a></li> <li><a href="#about">Vše o nákupu</a></li> <li><a href="#contact">Kontakt</a></li> </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="{{ URL::to('cart') }}"><i class="glyphicon glyphicon-shopping-cart"></i> Košík <span class="badge"></span></a></li> </ul> </div><!--/.nav-collapse --> </div> </nav> <div class="container"> @yield('content') </div> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> </body> </html> |
a už nám konečně něco funguje