您的位置:首页 >如何在 Laravel Blade 中实现过滤后仍保持正确的奇偶交替样式
发布于2026-05-02 阅读(0)
扫一扫,手机访问
在 Lara vel Blade 的 foreach 循环中,若通过 @if 条件过滤数据,原生 $loop->odd / $loop->even 将失效(因其基于原始数组索引而非实际渲染项)。本文提供可靠解决方案:使用自定义计数器实现精准的奇偶交替布局。

在 Lara vel Blade 模板里处理数据列表时,一个常见的需求是交替变换样式——比如一行左图右文,下一行右图左文,以此类推。使用 @foreach 配合 $loop->odd 或 $loop->even 通常能轻松搞定。但问题来了:一旦你在循环里加了条件判断,只渲染部分数据,这个“奇偶交替”的节奏就全乱了。
原因很简单:$loop 变量追踪的是原始数组的迭代顺序,而不是实际被渲染出来的有效项顺序。举个例子,假设你有一个包含5个项目的数组,但只有第1、2、4项通过了你的 @if 条件检查。这时,$loop 会忠实地告诉你:第一项是 odd,第二项是 even,第四项是 even。结果呢?连续两个“even”样式被渲染出来,视觉上的交替效果就被彻底打破了。
那么,如何确保过滤后的数据依然能保持精准的奇偶样式呢?
答案是:放弃依赖 $loop,转而使用一个独立的计数器,并且只在数据项“真正被渲染”时才递增它。 这个计数器的奇偶性,才是决定样式的唯一依据。
下面这段优化后的 Blade 代码,清晰地展示了这一思路:
@php $featuredCount = 0; @endphp
@foreach ($references as $reference)
@if(
isset($reference['is_startpage'])
&& $reference['is_startpage'] != 1
&& isset($reference['content']['featured'])
&& $reference['content']['featured'] == 1
)
@php $featuredCount++; @endphp
$featuredCount % 2 === 0,
])>
{{ $reference['title'] ?? 'Untitled' }}
@endif
@endforeach
@php $featuredCount = 0; @endphp 初始化计数器。这确保了计数器作用域清晰,且每次渲染都从零开始。$featuredCount++。这样,计数器的值就严格对应了“已展示的有效条目数”。$featuredCount % 2 === 0 来判断当前项是否为“逻辑上的偶数位”(即第2、4、6…个有效项)。这个判断简洁且绝对可靠。@class 指令。基础样式类(如 'row py-5')始终存在,而方向反转类(如 'flex-row-reverse')则根据计数器的奇偶性动态添加。这种写法语义更清晰,性能也更优。collect($references)->filter(...)->values() 预先过滤并重置索引。这能让你的 Blade 模板保持清爽,大幅提升可读性和可维护性。$featuredCount 而不是简单的 $i。这在团队协作中尤为重要,能让其他开发者一眼看懂变量的用途。总而言之,通过引入一个独立的自定义计数器,你可以完全掌控渲染项的奇偶顺序。无论原始数据如何被筛选,最终呈现的视觉交替效果都能保持准确、稳定且完全可预测。这个方法虽然简单,但却是解决此类问题的标准且健壮的实践。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9