Creado en: 2025-03-22 09:39:32
Actualizado en: 2025-03-22 09:39:32
pagina indexgallery del projecte larpreline.test/
route: C:\projectes\LARAVEL\larpreline\routes\web.php
Route::get('/indexgallery', [PostController::class, 'indexGallery'])->name('posts.indexGallery');
controller:C:\projectes\LARAVEL\larpreline\app\Http\Controllers\PostController.php
public function indexGallery(Request $request) { $query = Post::with(['category', 'etiquetas']); // Aplicar búsqueda if ($request->has('search')) { $query->where('title', 'like', '%' . $request->search . '%'); } // Aplicar filtro de categoría if ($request->has('category_id')) { $query->where('category_id', $request->category_id); } // Aplicar filtro de etiqueta if ($request->has('etiqueta_id')) { $query->whereHas('etiquetas', function ($q) use ($request) { $q->where('etiquetas.id', $request->etiqueta_id); }); } // Ordenar los resultados por el campo 'updated_at' en orden descendente $query->orderBy('updated_at', 'desc'); $posts = $query->get(); // Obtener todas las categorías para la lista horizontal $categories = Category::all(); return view('posts.index_gallery', compact('posts', 'categories')); }
view:C:\projectes\LARAVEL\larpreline\resources\views\posts\index_gallery.blade.php
@extends('layouts.uikit') @section('title', 'Gal.leria de posts') @section('subtitle', 'amb cards gallery Zzseba78') @section('content') <section class="uk-section uk-section-small uk-section-default uk-background-secondary"> <div class="uk-container uk-container-expand uk-margin-large-bottom"> <ul class="uk-subnav uk-subnav-pill"> <li class="uk-active" data-uk-filter-control><a href="{{ route('posts.indexGallery') }}">Show All</a></li> @foreach ($categories as $categoria) <li data-uk-filter-control=".{{ strtolower(str_replace(' ', '-', $categoria->name)) }}-card"> <a href="#">{{ $categoria->name }}</a> </li> @endforeach </ul> <div class="uk-grid uk-grid-medium uk-child-width-1-2@s uk-child-width-1-3@m uk-child-width-1-4@l uk-child-width-1-5@xl uk-grid-match js-filter" data-uk-grid="masonry: true"> @foreach ($posts as $post) <div class="{{ strtolower(str_replace(' ', '-', $post->category->name)) }}-card" data-tags="{{ strtolower($post->title . ' ' . $post->etiquetas->pluck('name')->implode(' ')) }}"> <div class="uk-card uk-card-small uk-card-default"> <div class="uk-card-header"> <div class="uk-grid uk-grid-small uk-text-small" data-uk-grid> <div class="uk-width-expand"> <span class="cat-txt">{{ $post->category->name }}</span> </div> <div class="uk-width-auto uk-text-right uk-text-muted"> <span data-uk-icon="icon:clock; ratio: 0.8"></span> {{ $post->updated_at }} </div> </div> </div> <div class="uk-card-media"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <img class="lazy" data-src="storage/{{ $post->img }}" data-uk-img alt="{{ $post->title }}"> </div> </div> <div class="uk-card-body"> <a href="{{ route('posts.detalle', $post->id) }}"> <h4 class="uk-margin-small-bottom uk-margin-remove-adjacent uk-text-bold"> {{ $post->title }} </h4> </a> <p class="uk-text-small uk-text-muted">{{ $post->excerpt }}</p> <div class="uk-flex uk-flex-wrap"> @if ($post->url) <a href="{{ $post->url }}" target="_blank" class="uk-icon-link" uk-icon="icon: link"></a> @endif @if ($post->ins) <a href="{{ $post->ins }}" target="_blank" class="uk-icon-link" uk-icon="icon: instagram"></a> @endif @if ($post->face) <a href="{{ $post->face }}" target="_blank" class="uk-icon-link" uk-icon="icon: facebook"></a> @endif @if ($post->youtube) <a data-fancybox="gallery" href="{{ $post->youtube }}" target="_blank" class="uk-icon-link" uk-icon="icon: youtube"></a> @endif </div> <div class="uk-flex uk-flex-wrap"> @foreach ($post->etiquetas as $etiqueta) <a href="#" data-uk-tooltip="title: {{ $etiqueta->name }}" data-uk-filter-control="[data-tags*='{{ strtolower(str_replace(' ', '-', $etiqueta->name)) }}']"> {!! $etiqueta->svg !!} </a> @endforeach </div> </div> </div> </div> @endforeach </div> </div> </section> <script type="text/javascript"> function filterCards(value) { const searchValue = value.toLowerCase().trim(); const cards = document.querySelectorAll('[data-tags]'); cards.forEach(card => { const tags = card.getAttribute('data-tags').toLowerCase(); if (tags.includes(searchValue)) { card.style.display = ''; } else { card.style.display = 'none'; } }); } </script> @stop