No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Filtrado por categoría

12/26
Recursos

¿Cómo habilitar el filtrado por categorías en PHP?

Optimizar la experiencia del usuario es esencial, y una manera efectiva de lograrlo es implementando el filtrado de contenido por categorías. Este método permite a los usuarios enfocarse en lo que realmente les interesa. A continuación, te mostraremos cómo configurar el filtrado por categorías en un componente PHP, aprovechando al máximo su potencial.

¿Cuál es el primer paso?

Para activar el filtrado, el primer paso es ajustar el componente del lado de PHP. Comienza añadiendo una nueva propiedad y un método encargado de asignar el valor correspondiente a esa propiedad. El método puede recibir cualquier nombre; en este caso, lo llamaremos filtrarPorCategoria. Este método tiene como función principal recibir un parámetro y asignar dicho valor a la propiedad.

public function filtrarPorCategoria($idCategoria)
{
    $this->categoriaSeleccionada = $idCategoria;
}

¿Cómo configuramos la consulta?

La consulta es vital para filtrar efectivamente los registros según la categoría seleccionada. Imagínate que puedes segmentar la consulta para agregar condiciones específicas. Utilizamos un bloque if para modificar la consulta SQL, si tenemos un valor en la propiedad de categoría. Aquí te mostramos cómo:

$query = "SELECT * FROM publicaciones";

if ($this->categoriaSeleccionada) {
    $query .= " WHERE category_id = " . $this->categoriaSeleccionada;
}

La consulta se inicia vacía, pero una vez que hay un valor asignado a la propiedad, se modifica para filtrar por categoría.

¿Cómo interactúa la vista con el método?

Es crucial permitir que la interfaz de usuario (UI) interactúe con el método. Al trabajar desde la vista, utilizamos enlaces o botones que, al hacer clic, llaman al método y pasan el ID de categoría correspondiente.

<a href="#" wire:click.prevent="filtrarPorCategoria('{{ $categoria->id }}')"> 
    {{ $categoria->nombre }} 
</a>

Con prevent evitamos que la página se recargue, asegurando una experiencia de usuario fluida.

¿Cómo manejar todos los resultados?

Lo interesante de esta configuración es que es reversible. Para mostrar todos los elementos nuevamente, simplemente enviamos un valor en blanco a la propiedad, lo que restablece la consulta a su estado original.

public function mostrarTodos()
{
    $this->categoriaSeleccionada = '';
}

Implementar esto permite alternar entre una vista filtrada y una genérica, sin complicaciones.

¿Cómo sumar filtros con búsqueda?

Un beneficio añadido de esta técnica es poder combinarla con un filtro de búsqueda, contabilizando múltiples criterios. Así, puedes buscar por texto y filtrar por categoría al mismo tiempo, maximizando el potencial de la herramienta.

  • Búsqueda libre de categoría: Los registros que contengan el texto aparecerán independientemente de su categoría.
  • Combinación de filtros: Si se aplica un filtro de categoría, se sumarán las condiciones de búsqueda.

Este enfoque demuestra la flexibilidad y potencia de usar PHP para desarrollar sistemas interactivos y responden eficientemente a las necesidades del usuario. Implementa esta configuración y transforma la manera en que presentas el contenido a través del filtrado por categorías. ¡Continúa aprendiendo y perfeccionando tus habilidades en desarrollo web!

Aportes 4

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Excelente vamos bien, Liveware es espectacular me encanta.
Super interesante el tema de que se sumen las Querys, básicamente separando la consulta en fragmentos, lo que conseguimos es ese anidamiento lo cual es sumamente útil al momento de querer filtrar por más de un parámetro. 👨‍💻
Para que copien y peguen amiguitos wire:click.prevent="filterByCategory('{{$category->id}}')" public $category= ""; public function filterByCategory($category){ $this->category = $category; } public function render(){ $categories = Category::get(); $x = $class::query(); $x->where('name','like',"%$this->searchCategory%"); if($this->category){ $x->where('category\_id',$this->category); } $x->withCount('replies'); $x->latest(); return $x->get(); }

Yo lo resolvi con un join dentro del componete ShowThreads

 	public $searchCategory='';
  $threads->join('categories','threads.category_id', '=', 'categories.id')
        ->where('name','like',"%$this->searchCategory%");

Ademas de ocupar la propiedad $set de livewire

wire:click="$set('searchCategory','{{$categoria->name}}')"

Si quisieran ocupar solo el click tendrían que modificar el código del inicio de esta manera:

public $searchCategory='';

public function SetCategoria($nombre)
{
	$this->searchCategory=$nombre;
}

El html no cambia mucho:

wire:click="SetCategoria('{{$categoria->name}}')"