You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Laravel框架中实现基于复选框的商品筛选功能

我来帮你搞定这个复选框筛选功能,结合你用的Laravel框架,分前端和后端两部分来实现,既流畅又实用:

实现商品复选框筛选功能的完整方案

一、前端添加筛选交互

首先在你的商品页面里,先加上筛选用的复选框区域,再通过JS监听复选框变化,异步更新商品列表:

1. 页面结构修改(Blade视图)

把筛选区和商品列表分开,方便后续异步更新:

@extends('layouts.app') 
@section('content') 
<h1>Products</h1>

<!-- 筛选条件区域 -->
<div class="filter-bar mb-4 p-3 border rounded">
    <h4>筛选条件</h4>
    <!-- 示例:按商品分类筛选 -->
    <div class="d-flex flex-wrap gap-3">
        <div class="form-check">
            <input class="form-check-input filter-option" type="checkbox" name="category" value="electronics" id="cat-electronics">
            <label class="form-check-label" for="cat-electronics">电子产品</label>
        </div>
        <div class="form-check">
            <input class="form-check-input filter-option" type="checkbox" name="category" value="clothing" id="cat-clothing">
            <label class="form-check-label" for="cat-clothing">服装</label>
        </div>
        <div class="form-check">
            <input class="form-check-input filter-option" type="checkbox" name="category" value="home" id="cat-home">
            <label class="form-check-label" for="cat-home">家居用品</label>
        </div>
        <!-- 可扩展更多属性:比如标签、价格区间等 -->
    </div>
</div>

<!-- 商品列表容器(用于异步更新) -->
<div id="products-list">
    @include('products.partials.product_items', ['products' => $products])
</div>
@endsection

2. 提取商品列表片段

创建resources/views/products/partials/product_items.blade.php,把商品循环逻辑单独抽出来:

@if(count($products) > 0)
    @foreach($products as $product)
        <div class="well mb-3">
            <div class="row">
                <div class="col-md-4 col-sm-4">
                    <img style="width:40%" src="{{ $product->image_url ?? '默认图片地址' }}" alt="{{ $product->name }}">
                </div>
                <div class="col-md-8 col-sm-8">
                    <h3><a href="/products/{{ $product->id }}">{{ $product->name }}</a></h3>
                    <p>{{ Str::limit($product->description, 100) }}</p>
                    <p class="text-muted">分类: {{ $product->category }}</p>
                </div>
            </div>
        </div>
    @endforeach
@else
    <p class="text-center py-4 bg-light rounded">暂无符合条件的商品</p>
@endif

3. 筛选交互JS代码

用jQuery实现异步筛选(Laravel默认集成了jQuery,直接用就行):

<script>
$(document).ready(function() {
    // 监听所有筛选复选框的变化
    $('.filter-option').on('change', function() {
        // 收集所有选中的分类值
        let selectedCats = [];
        $('input[name="category"]:checked').each(function() {
            selectedCats.push($(this).val());
        });

        // 发送AJAX请求到后端
        $.ajax({
            url: '{{ route('products.filter') }}',
            method: 'GET',
            data: { categories: selectedCats },
            beforeSend: function() {
                // 可选:添加加载动画
                $('#products-list').html('<div class="text-center py-5"><span class="spinner-border"></span> 加载中...</div>');
            },
            success: function(response) {
                // 更新商品列表
                $('#products-list').html(response);
            },
            error: function() {
                $('#products-list').html('<p class="text-center py-4 bg-danger text-white rounded">筛选出错,请重试</p>');
            }
        });
    });
});
</script>

二、后端处理筛选逻辑

1. 添加筛选路由

在routes/web.php里新增路由:

use App\Http\Controllers\ProductController;

Route::get('/products/filter', [ProductController::class, 'filter'])->name('products.filter');

2. 控制器筛选方法

在ProductController里添加处理筛选的方法:

use Illuminate\Http\Request;
use App\Models\Product;

public function filter(Request $request)
{
    // 初始化商品查询
    $query = Product::query();

    // 如果有选中的分类,添加筛选条件
    if ($request->has('categories') && !empty($request->categories)) {
        $query->whereIn('category', $request->categories);
    }

    // 可扩展:添加更多筛选条件,比如标签、价格范围等
    // if ($request->has('tags')) { ... }

    // 获取筛选后的商品
    $products = $query->paginate(10); // 用分页更友好

    // 返回商品列表片段视图
    return view('products.partials.product_items', compact('products'));
}

三、额外优化建议

  • 添加全选/取消全选按钮,提升用户操作效率
  • 把筛选参数同步到URL上,支持刷新页面保留筛选状态
  • 给筛选条件添加“重置”按钮,快速清空所有选择

内容的提问来源于stack exchange,提问作者hsnsd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:31:25