51. Filtrar los posts por categorías

En este capítulo, aprenderás cómo filtrar los posts por categoría en tu blog utilizando Laravel. Comenzaremos por comprender los conceptos fundamentales de las relaciones entre modelos en Laravel, y cómo utilizarlas para relacionar tus posts con sus respectivas categorías. Luego, te guiaremos a través del proceso de diseño y construcción de una ruta y una vista para filtrar los posts por categoría. Aprenderás cómo utilizar las variables de ruta en Laravel para recuperar el ID de la categoría seleccionada, y cómo utilizar las relaciones entre modelos para filtrar los posts correspondientes a esa categoría. También te mostraremos cómo utilizar las funciones de Blade para mostrar los posts filtrados en una vista clara y organizada, y cómo agregar opciones de ordenamiento para que los usuarios puedan ver los posts en el orden que deseen.


5 comentarios

Inicia sesión para comentar

Comentarios:

  • Walter

    Walter hace 1 año

    ? 5° Vista posts por categorías

     

    ? Creamos el archivo category.blade.php en /resources/views/posts/:

     

    <x-app-layout>
    
      <div class="max-w-5xl mx-auto px-2 sm:px-6 lg:px-8 py-8">
        <h1 class="uppercase text-center text-3xl font-bold">
        	Categoría: {{ $category->name }}
        </h1>
    
        @foreach ($posts as $post)
        <article class="mb-8 bg-white shadow-lg rounded-lg overflow-hidden">
          <img class="w-full h-80 object-cover object-center" 
          	src="{{ Storage::url($post->image->url) }}" alt="{{ $post->name }}">
    
          <div class="px-6 py-4">
            <h1 class="font-bold text-xl mb-2">
              <a href="{{ route('posts.show', $post) }}">{{ $post->name }}</a>
            </h1>
            <div class="text-gray-700 text-base">
              {{ $post->stract }}
            </div>
          </div>
    
          <div class="px-6 pt-4 pb-2">
            @foreach ($post->tags as $tag)
            <a href="" class="inline-block bg-gray-200 rounded-full px-3 py-1 
            	text-sm text-gray-700 mr-2">{{ $tag->name }}</a>
            @endforeach
          </div>
    
        </article>
        @endforeach
    
        <div class="mt-4">
          {{ $posts->links() }}
        </div>
    
      </div>
    
    </x-app-layout>

     

  • Walter

    Walter hace 1 año

    ? 4° Enlaces en el menú móvil de categorías

     

    ? Editamos la vista /resources/views/livewire/navigation.blade.php:

     

    @foreach ($categories as $category)
        <a href="{{ route('posts.category', $category) }}" class="text-gray-300 
        	hover:bg-gray-700 hover:text-white block px-3 py-2 rounded-md 
        	text-base font-medium"
        >{{ $category->name }}</a>
    @endforeach

     

  • Walter

    Walter hace 1 año

    ? 3° Enlaces en el menú de categorías

     

    ? Editamos la vista /resources/views/livewire/navigation.blade.php:

     

    @foreach ($categories as $category)
        <a href="{{ route('posts.category', $category) }}" class="text-gray-300 
        	hover:bg-gray-700 hover:text-white px-3 py-2 rounded-md 
        	text-sm font-medium">{{ $category->name }}</a>
    @endforeach

     

  • Walter

    Walter hace 1 año

    ? 2° Agregamos el método category al controlador

     

    ? Editamos el archivo /app/Http/Controllers/PostController.php:

     

    public function category(Category $category)
    {
      $posts = Post::where('category_id', $category->id)
      	->where('status', 2)
      	->latest('id')
      	->paginate(6);
    
      return view('posts.category', compact('posts', 'category'));
    }

     

  • Walter

    Walter hace 1 año

    ? 1° Crear la ruta encargada de mostrar los posts por categorías

     

    ? Editamos /routes/web.php

     

    Route::get('category/{category}', [PostController::class, 'category'])
    	->name('posts.category');