当循环中变量值不同时,Laravel Blade会更改行颜色

时间:2017-02-16 21:11:44

标签: laravel laravel-5 laravel-blade

我有一个循环通过集合的报告页面,并在通用引导程序模板表中显示数据 - 它显示有关用户的数据,一个用户可以在表中有多行。我按用户ID对行进行分组,我希望基本上根据用户ID(不仅仅是交替的行)对表行进行条带化。因此,例如,我可能会显示4行,用户ID = 5,带有白色背景,然后2行,用户ID = 6,带有灰色背景。我只是在直接的php中使用局部变量,但是在刀片模板中是否有一种优雅/干净的方法呢?

@foreach($payments->getDetails() AS $k=>$detail)
<tr>
    <td>{{ $detail->payment->userid }}</td>
    <td>${{ $detail->payment->amount }}</td>
    <td>{{ $detail->payment->status }}</td>
</tr>
@endforeach

在此示例中,$ payments是$ paymentsDetails对象的集合。因此,根据$ detail-&gt; payment-&gt; userid值,我想确定类或背景颜色。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

只是一个想法...这假设行是按用户ID自然排序的(无论如何它都不会在你的例子中起作用......)......所以这就是思想......

如果用户ID是奇数,那么给它一个颜色,如果它是偶数,给它替代颜色......那将起作用......排序......

@foreach($payments->getDetails() AS $k=>$detail)
<tr>
    <td class="{{$detail->payment->userid % 2 == 0 ? 'evenColor':'oddColor'">{{ $detail->payment->userid }}</td>
    <td class="{{$detail->payment->userid % 2 == 0 ? 'evenColor':'oddColor'">{{ $detail->payment->amount }}</td>
    <td class="{{$detail->payment->userid % 2 == 0 ? 'evenColor':'oddColor'">{{ $detail->payment->status }}</td>
</tr>
@endforeach

这样的东西也会起作用......不确定我喜欢它

@foreach($payments->getDetails() AS $k=>$detail)
    @if($detail->payment->userid % 2 == 0)
        <tr>
            <td class="evencolor">{{ $detail->payment->userid }}</td>
            <td class="evencolor">>${{ $detail->payment->amount }}</td>
            <td class="evencolor">{{ $detail->payment->status }}</td>
        </tr>
    @else
        <tr>
            <td class="oddcolor">{{ $detail->payment->userid }}</td>
            <td class="oddcolor">${{ $detail->payment->amount }}</td>
            <td class="oddcolor">{{ $detail->payment->status }}</td>
        </tr>
    @endif
@endforeach

无论如何......只是一个可能的方向......别人可能有一个更优雅的想法...

答案 1 :(得分:0)

我通过www.laracasts.com从用户@Cronix获得了解决方案:

  

我会按照你最初想的方式来做,然后才使用   @php / @ endphp blade指令确定用户标识是否已更改   在每次循环迭代期间,如果它确实改变了颜色。

@php 
$lastid = null;
$rowclass = 'grey';
@endphp

@foreach($payments->getDetails() AS $k=>$detail)
@php 
 //if userid changed from last iteration, store new userid and change color
 if ($lastid !== $detail->payment->userid)
 {
    $lastid = $detail->payment->userid;
    if ($rowclass == 'grey') $rowclass = 'white';
    else $rowclass = 'grey';
 }
@endphp
<tr class="{{ $rowclass }}">
    <td>{{ $detail->payment->userid }}</td>
    <td>${{ $detail->payment->amount }}</td>
    <td>{{ $detail->payment->status }}</td>
</tr>
@endforeach

如果那里的任何人都有更优雅的专注于如何解决它的想法,我很乐意听到它。

答案 2 :(得分:0)

伙计们,上面的方法对我来说失败了,以防万一其他人需要这样做:我在laravel 5.4和php 5.6中使用了im ==>

@php

                if ( $post->dbdata == 'approved'):
                    $color = 'green';
                elseif ( $post->dbdata == 'Pending'):
                $color = 'yellow';
                elseif ( $post->dbdata == 'rejected'):
                $color = 'red';
                else:
                $color = 'black';
                endif;

                @endphp
                <tr style="background-color: {{$color}}">
                    <td>
                        <h6>{{ $post->dbdata }}</h6>
                    </td>
                </tr>