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

如何在Blade视图中按类型筛选展示并控制Logo显示状态?

解决方案

咱们先从后端数据准备入手,确保传给视图的数据已经按要求筛选好,这样前端渲染会更简洁高效:

1. 控制器中筛选并分组数据

假设你的模型是PartnerCustomer(如果是其他名称直接替换就行),在对应的控制器方法里,我们可以分别查询出需要在首页展示的合作伙伴和客户数据:

use App\Models\PartnerCustomer;

public function index()
{
    // 筛选出要显示的合作伙伴:类型为1,且勾选了首页显示(is_show=1)
    $partners = PartnerCustomer::where('type', 1)
                                ->where('is_show', 1)
                                ->get();

    // 筛选出要显示的客户:类型为2,且勾选了首页显示(is_show=1)
    $customers = PartnerCustomer::where('type', 2)
                                ->where('is_show', 1)
                                ->get();

    return view('你的视图名称', compact('partners', 'customers'));
}

这里的is_show是对应复选框的布尔字段,如果你的字段名是别的(比如display_on_home),记得改成你实际用的字段名哦。


2. Blade视图中分别渲染两个轮播组件

接下来在Blade视图里,针对合作伙伴和客户的轮播组件,分别遍历对应的数据即可。下面以Bootstrap的Carousel组件为例(你可以换成自己项目用的轮播组件):

合作伙伴轮播

<div id="partnersCarousel" class="carousel slide" data-bs-ride="carousel">
    <div class="carousel-inner">
        @foreach($partners as $index => $partner)
            <div class="carousel-item {{ $index === 0 ? 'active' : '' }}">
                <!-- 用asset()生成Logo的完整访问路径 -->
                <img src="{{ asset($partner->logo) }}" class="d-block w-100" alt="{{ $partner->name }}">
                <!-- 如果需要显示名称等额外信息,可以加上这段 -->
                <div class="carousel-caption d-none d-md-block">
                    <h5>{{ $partner->name }}</h5>
                </div>
            </div>
        @endforeach
    </div>
    <!-- 轮播切换按钮 -->
    <button class="carousel-control-prev" type="button" data-bs-target="#partnersCarousel" data-bs-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="visually-hidden">上一张</span>
    </button>
    <button class="carousel-control-next" type="button" data-bs-target="#partnersCarousel" data-bs-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="visually-hidden">下一张</span>
    </button>
</div>

客户轮播

<div id="customersCarousel" class="carousel slide mt-4" data-bs-ride="carousel">
    <div class="carousel-inner">
        @foreach($customers as $index => $customer)
            <div class="carousel-item {{ $index === 0 ? 'active' : '' }}">
                <img src="{{ asset($customer->logo) }}" class="d-block w-100" alt="{{ $customer->name }}">
                <div class="carousel-caption d-none d-md-block">
                    <h5>{{ $customer->name }}</h5>
                </div>
            </div>
        @endforeach
    </div>
    <button class="carousel-control-prev" type="button" data-bs-target="#customersCarousel" data-bs-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="visually-hidden">上一张</span>
    </button>
    <button class="carousel-control-next" type="button" data-bs-target="#customersCarousel" data-bs-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="visually-hidden">下一张</span>
    </button>
</div>

额外优化:处理空数据场景

如果某一类没有符合条件的记录,轮播可能会显示异常,咱们可以加上空状态提示,提升用户体验:

比如在合作伙伴轮播里:

<div class="carousel-inner">
    @if($partners->isNotEmpty())
        @foreach($partners as $index => $partner)
            <!-- 轮播项代码 -->
        @endforeach
    @else
        <div class="carousel-item active">
            <div class="d-flex align-items-center justify-content-center h-100 py-5">
                <p class="text-muted">暂无合作伙伴Logo展示</p>
            </div>
        </div>
    @endif
</div>

客户轮播也可以用同样的方式处理。

这样就完美实现了你的两个需求:按类型分别展示到对应轮播,并且只显示勾选了“首页展示”的Logo~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:55:03