Mostrando entradas con la etiqueta Yield. Mostrar todas las entradas
Mostrando entradas con la etiqueta Yield. Mostrar todas las entradas

Ejemplo general Yield

En admin/layouts/layout.blade.php:
@include("admin/layouts/header")

@yield("css_aux")
@yield("contenido")

@include("admin/layouts/footer")

En admin/layouts/header.blade.php:
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>{{ $title ?? 'Título genérico' }}</title>
    <!-- Fonts -->
    <link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <link href="{!! asset('css/style_lsg.css') !!}" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.4/css/jquery.dataTables.min.css">
</head>
<body>
{{app()->setLocale(session()->get('language'))}}

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  ...
</nav>

En admin/layouts/footer.blade.php:
<h1>Esto es el footer</h1>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<script type="text/javascript" src="{!! asset('js/funciones_lsg.js') !!}"></script>

@yield("js_aux")

<script>
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': '{{ csrf_token() }}'
        }
    });
</script>


 </body>
</html>

En cualquier vista por ejemplo en index.blade.php:
@extends('admin.layouts.layout', ['title' => 'En un lugar de la mancha'])

@section("css_aux")
  los css específicos para esta página en concreto
@endsection

@section("contenido")
    html que se quiera meter
@endsection

@section("js_aux")
  los js específicos para esta página en concreto
@endsection

Pasar un array de un controller a una vista

public function galeria() {
$cineastas = ["Robert donat", "James Stewart", "Gary Cooper", "James Cagney"];
return view("galeria", compact("cineastas"));
}

Y en galeria.blade.php:
@section("cuerpo")
    @if (count($cineastas))
        <table width="90%" border=1>
            @foreach ($cineastas as $item)
                <tr><td>{{$item}}</td></tr>
            @endforeach
        </table>
    @endif
@endsection

Uso de Yield en las vistas

Creamos una plantilla genérica en views por ejemplo layouts/plantilla.blade.php (no es necesario que la carpeta se llame layouts):
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Laravel</title>
   <style>
    .cabecera { font-size:12px;}
    .cuerpo { font-size:22px;}
    .pie { font-size:32px;}
   </style>
</head>
<body>

<div class="cabecera">
    @yield("cabecera")
</div>

<div class="cuerpo">
    @yield("cuerpo")
</div>

<div class="pie">
    @yield("pie")
</div>

Lo mismo para personalizar en cada página los CSS y los js:
@yield("css_lsg")
...
@yield("js_lsg")
</body>
</html>

Y ahora ya podemos reutilizar esa plantilla con sus estilos en todas las demás vistas que queramos, por ejemplo en galeria.blade.php:

@extends("layouts/plantilla")

@section("cabecera")
Esta es la cabecera
@endsection

@section("cuerpo")
Esto es el cuerpo
@endsection

@section("pie")
Esto es el pie
@endsection