user12869095
user12869095

Reputation:

Filtering data by category JavaScript

I'm new to javascript. We have a category selection function. Can you please help to suggest a filtering function that, when choosing a specific category, will pull up all blogs from this category by ID?

JavaScript

document.querySelectorAll('.category-filter_item').forEach(el => {
  el.addEventListener('click', () => {
    document
      .querySelector('.category-filter_item.active')
      .classList.remove('active');
    el.classList.add('active');

We have something like the following code on the blog page. First we get all the available categories, then a list of all blogs.

@extends('layouts.app')

@section('content')
<div class="container">
<div class="category-filter" id="filter">
     <div class="category-filter_item active">All</div>
     @foreach($categories as $category)
     <div class="category-filter_item">{{ $category->title }}</div>
     @endforeach
</div>

@foreach($blogs as $blog)
    <div class="blog-list {{ $blog->category_id}}">
        <h2 class="blog_title">{{ $blog->title }}</h2>
    </div>
@endforeach
</div>
@endsection

Controller

public function index()
    {
        $blogs = Blog::all();
        $categories = Category:all();

        return view('blog', compact('blogs', 'categories'));
    }

Development environment Laravel

Alternation

@foreach ($blogs as $index => $blog)
    <div class="blog-list">
        @if ($index % 2 === 1) 
            <div class="blog blog--left" >
                <h2 class="blog_title">{{ $blog->title }}</h2>
            </div>
        @else

            <div class="blog blog--right">
                <h2 class="blog_title">{{ $blog->title }}</h2>
            </div>
        @endif
    </div>
@endforeach

Upvotes: 0

Views: 544

Answers (1)

Mehrdad Abbasi
Mehrdad Abbasi

Reputation: 73

You can use Isotop.js it would be easy and nice.

or use this code:

@extends('layouts.app')

@section('content')
<div class="container">
<div class="category-filter" id="filter">
    <div class="category-filter_item active" data-filter="*">All</div>
    @foreach($categories as $category)
    <div class="category-filter_item" data-filter=".category_{{$category->id}}">{{ $category->title }}</div>
    @endforeach
</div>

    @foreach($blogs as $blog)
    <div class="blog-list category_{{ $blog->category_id}}">
        <h2 class="blog_title">{{ $blog->title }}</h2>
    </div>
    @endforeach
</div>
@endsection


<script src="https://code.jquery.com/jquery-3.6.0.slim.min.js"></script>

<script>
$('.category-filter_item').click(function(){
    $('.category-filter_item').removeClass('active')
    $(this).addClass('active')
    var dataFilter = $(this).attr('data-filter');
    $('.blog-list').hide()
    $(dataFilter).show()
})
</script>

Upvotes: 1

Related Questions