Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Home page dell'e-commerce: template della view e route

Continuiamo a realizzare la home page del nostro e-commerce basato su Laravel introducendo gli argomenti riguardanti i template della view e le route
Continuiamo a realizzare la home page del nostro e-commerce basato su Laravel introducendo gli argomenti riguardanti i template della view e le route
Link copiato negli appunti

Dopo aver analizzato la parte di progetto relativa al controller, in questo secondo capitolo dedicato a come realizzare la home page del nostro e-commerce introduciamo gli argomenti riguardanti i template della view e route.

Gestione dei template della view

Blade supporta l'ereditarietà dei template. Per sfruttare questa caratteristica creiamo la directory layouts in resources/views. Al suo interno salviamo il file site.blade.php che definisce il template di base.

<!DOCTYPE html>
<html>
<head>
    <title>{{ $title }}</title>
    <meta charset="utf-8">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <link rel="stylesheet" type="text/css" media="screen" href="{{asset('assets/css/bootstrap/css/bootstrap.min.css')}}">
    <link rel="stylesheet" type="text/css" media="screen" href="{{asset('assets/css/font-awesome/css/all.css')}}">
    <link rel="stylesheet" type="text/css" media="screen" href="{{asset('assets/css/style.css')}}">
    <link rel="shortcut icon" href="{{asset('favicon.png')}}" type="image/x-icon">
</head>
<body>
<header id="site-header">
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <a class="navbar-brand" href="/">PHP Ecommerce</a>
        <div class="collapse navbar-collapse">
            <ul class="navbar-nav">
                <li class="nav-item">
                    <a class="nav-link" href="/">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="/shop">Negozio</a>
                </li>
            </ul>
        </div>
    </nav>
</header>
<div id="site" class="container">
        @yield('content')
</div>
<script src="{{asset('assets/js/jquery.min.js')}}"></script>
<script src="{{asset('assets/js/validator.min.js')}}"></script>
<script src="{{asset('assets/js/typeahead.js')}}"></script>
<script src="{{asset('assets/js/ecommerce.js')}}"></script>
</body>
</html>

content è un segnaposto con cui indicare a Blade dove andrà inserita una @section omonima definita in un template che estende (@extends) il template di base.

Il template della home page (views/home.blade.php) avrà allora questa struttura.

@extends('layouts.site')
@section('content')
    <section class="row products">
        @foreach($products as $product)
            @include('product', ['product' => $product])
        @endforeach
        {{ $products->links() }}
    </section>
@endsection

Blade usa il punto come separatore delle directory e non lo slash, quindi il file layouts/site.blade.php verrà richiamato come layouts.site.

Il metodo links() genera la struttura HTML della paginazione dei prodotti che è già compatibile con Bootstrap.

@include serve a includere un blocco specifico, ossia un sottotemplate Blade che gestisce un particolare frammento HTML. Questa direttiva accetta come secondo parametro eventuali variabili da passare al template usando un array associativo.

Ecco quindi views/product.blade.php.

<article class="col-md-6 product">
    <header>
        <h3>{{ $product['title'] }}</h3>
    </header>
    <figure>
        <a href="{{ url('/') }}/prodotti/{{ $product['slug'] }}">
            <img src="{{ url('assets/images') }}/{{ $product['image'] }}" class="img-fluid" alt="">
        </a>
    </figure>
    <p class="text-muted text-truncate">{{ $product['description'] }}</p>
    <footer class="row">
        <div class="col-md-6">&euro; {{ $product['price'] }}</div>
        <div class="text-right col-md-6">
            <a href="{{ url('/') }}/add-to-cart/{{ $product['id'] }}" class="btn btn-success">Aggiungi</a>
        </div>
    </footer>
</article>

Creazione della route

Le route vanno aggiunte nel file routes/web.php e collegano un percorso ad uno specifico metodo di uno specifico controller.

Route::get('/', 'HomeController@index')->name('home');

Il metodo name(), facoltativo, assegna un nome interno alla route. Si tratta di una pratica molto utile in vari contesti. Ad esempio se dovessimo effettuare un redirect HTTP, potremmo usare semplicemente il nome della route senza bisogno di dover specificare il percorso che è già stato associato a quel nome.

Conclusione

Nei prossimi capitoli vedremo in dettaglio le altre sezioni dell'e-commerce e ci concentreremo in particolare sulla procedura di acquisto.

Ti consigliamo anche