Mostrar Posts

Mostrar Posts

Para mostrar el contenido de los Posts en el Frontend Eliminar el menu de Post del menu Builder también eliminarlo de nuestro archivo de rutas, porque los vamos a mostrar directamente en el Home page de nuestro Frontend. Vamos a crear un Controlador “PostController” para extraer los datos.

lando php artisan make::controller PostController 

Modificar el código en: app/Http/Controllers/PostController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use PhpParser\Node\Expr\AssignOp\Pow;
use TCG\Voyager\Models\Post;

class PostController extends Controller
{
    public function index(){
        $posts = Post::paginate();
        return view('welcome', compact('posts'));
    }

    public function show(Post $post){
        return view('posts.show', compact('post'));
    }
}

Y en resources/views/welcome.blade.php

<x-app-layout>

    <div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
        <h1 class="mt-4 text-4xl font-semibold text-center mb-8">{{ setting('site.title') }}</h1>

        <ul class="space-y-8">
            @foreach ($posts as $post)
                <li>
                    <article>
                        <h1 class="text-2xl font-semibold">
                            <a href="{{ route('posts.show', $post) }}">
                                {{ $post->title }}
                            </a>
                        </h1>
                        <figure>
                            <img src="{{ Voyager::image($post->image) }}" alt="" class="aspect-[3/1] object-cover">
                        </figure>
                        <p>{{ $post->excerpt }}</p>
                    </article>
                </li>
            @endforeach
        </ul>

        {{-- links de pagination --}}
        {{ $posts->links() }}

    </div>

</x-app-layout>

Y en resources/views/posts/show.blade.php

<x-app-layout :title="$post->seo_title">

    @push('meta')
        <meta name="description" content="{{ $post->meta_description }}">
    @endpush

    <div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
        <h1 class="text-2xl font-semibold mb-4">
            {{ $post->title }}
        </h1>
        <p>{{ $post->excerpt }}</p>
        <figure class="mb-4">
            <img src="{{ Voyager::image($post->image) }}" alt="" class="aspect-[3/1] object-cover">
        </figure>
        {{-- el body tiene texto enriquecido por eso lo colocamos dentro de los signos !! --}}
        <div>
            {!! $post->body !!}
        </div>
    </div>

</x-app-layout>

Meta Descripción

También podemos incluir meta descripción que esta incluido en nuestros Posts entrando en el header de resources/views/layouts/app.blade.php

@stack('meta')

17:35 Y en resources/views/posts/show.blade.php

@push('meta')
    <meta name="description" content="{{ $post->meta_description }}">
@endpush 

Pasar el titulo de la pestaña

19:37 Al inicio de resources/views/layouts/app.blade.php, tambien reemplazar el title por la variable title

@props(['title'] => config('app.name', 'Laravel')) 
<head>
    @stack('meta')
    <title>{{ $title }}</title>
</head>

Ahora para poder enviarle el nombre del title desde show post En resources/views/posts/show.blade.php

<x-app-layout title="Prueba"> 

Ya funciona! Ahora para mandarle el campo de la base de datos seo_title y decirle que esto es código php se usan los dos puntos, asi:

<x-app-layout :title="$post->seo_title">

Definiciones

aspect-[3/1] Aspecto de la imagen 3 a 1

object-cover La imagen no se deforme cuando dimensionamos

py-12 Para que tenga una separación tanto en la parte de arriba como en la de abajo

Símbolos {!! $post->body !!} El body del post tiene texto enriquecido por eso lo colocamos dentro de los signos !! para no perder la información y se puedan representar correctamente los caracteres.