Reputation:
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?
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
public function index()
{
$blogs = Blog::all();
$categories = Category:all();
return view('blog', compact('blogs', 'categories'));
}
Development environment Laravel
@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
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