domenica 18 novembre 2018

Ereditarietà dei template

E' normale per tutti gli MVC avere un sistema di viste parziali ovvero di template ripetuti dove le pagine delle view vengono immesse come parte di essa.
E' il metodo più comodo per avere parti di template uguali per tutte le pagine.

Il LARAVEL otteniamo questo usando la direttiva @yield

Creiamo quindi un template base. Per esempio prendentene uno da Bootstrap o Material.
Nella directory delle view, create una directory templates e create un file tipo base.balde.layout

Copiate il template che avete prelevato da internet.
Andate nella sezione del title e mettete la seguente direttiva:

<title> {{ $title }} </title>
<title> @yield("title","Admin Basic Page") </title>

Come vedete ho messo due modi per poter rendere il title del sito dinamico.
Il primo preleva direttamente la variabile passata alla view nella maniera vista nel post precedente.
La seconda invece imposta un placeholder che di default sarà uguale a "Admin Basic Page" ma se chi estenderà questo template lo imposta, userà quello.
Andiamo poi nel body della nostra pagina template o comunque nel punto dove vogliamo far agganciare il contenuto di CHI estenderà questo layout. Mettiamo un altro placeholder chiamandolo content
<main class="mdl-layout__content mdl-color--grey-100">
   <div class="mdl-grid demo-content">
       @yield('content')
   </div>
</main>

A questo punto la nostra vista index che avevamo fatto prima, diventerà una "vista parziale" perché di fatto aggiunge solo contenuto ad una vista più grande.

@extends('templates.adminlayout')

@section('title',$title)

@section('content')
    @if ($title)

        <h1> {{ $title }} </h1>
        @if ($subtitle)
            <h2> {{ $subtitle }}
        @endif

    @endif
@endsection
//@stop si può usare anche stop invece che endsection


Come vedete abbiamo prima detto che questa view estende quella principale.
Poi abbiamo definito una sezione atomica con il titolo del sito ed una sezione più corposa nella quale abbiamo messo il codice che avevamo già.

Nessun commento:

Posta un commento