【问题标题】:Alternating rows background depending a changing value in Laravel交替行背景取决于 Laravel 中的变化值
【发布时间】:2021-09-17 04:02:28
【问题描述】:

这是我的表格的刀片模板,我在根据值更改行时遇到问题。如果命令编号发生变化,我希望该行和具有该命令编号的所有后续行都发生变化,然后在每次不同时在白色/灰色之间交替。

我知道它看起来很基本,但我无法在我的算法中创建条件。我的第一个 if 查看上一次迭代是否具有不同的命令号并更改类,但我错过了检查上一次迭代是否具有相同的命令号的那个,因此保持相同的背景。我不知道如何检查 css 类并交替使用 2 个背景白色/灰色。我尝试使用 Laravel 的 $attributes ,但它始终未定义。 我希望我对我的问题很清楚,而且表格已经通过增加 command_number 进行排序。

如果你需要控制器,我可以提供。

谢谢

 tr.second th, tr.second td {
            background-color: #D1D1D1;
        }
//////
<tbody>
                    @foreach($data as $key => $line)
                        @if($key > 0)
                            <tr @if ($data[$key]['command_number'] != $data[$key-1]['command_number']) class="second"
                                @elseif()
                                @endif>

                                @foreach($line as $item)
                                    @if(($item == $line['quantity']) || ($item == $line['delivery']))
                                        <td>
                                            <strong>{{$item}}</strong>
                                        </td>
                                    @elseif($item == $line['hours'])
                                        <td>
                                            <strong style="color: red;">{{$item}}</strong>
                                        </td>
                                    @else
                                        <td>
                                            {{$item}}
                                        </td>
                                    @endif
                                @endforeach
                            </tr>
                        @endif
                    @endforeach
                </tbody>

【问题讨论】:

  • 您应该将类​​名存储到一个变量中,然后每当命令编号在一条记录和另一条记录之间发生变化时“切换”该变量。然后您只需将该变量的值作为类属性的内容输出(无需在该位置应用任何进一步的条件。)
  • key 是命令的唯一键吗?
  • 我不确定我理解你的意思,key代表当前的迭代。

标签: php html css laravel


【解决方案1】:

如果您想根据之前的结果更改类,为什么不跟踪 css 类以与循环外的切换变量一起使用,如下所示:

// in your blade file
@php
    $toggle = false;
@endphp

@foreach(range(0, 10) as $number)

    <div class="@if($toggle) someClass @else otherClass @endif unrelatedClasses">
        
    </div>

    @php 
        $toggle = !$toggle 
    @endphp 

@endforeach

或者,切换应该在您的情况下起作用:

// You could change the value of toggle based on your use case, like:
@php 
    $toggle = ($data[$key]['command_number'] != $data[$key-1]['command_number']);
@endphp 

除了使用$key,您还可以使用$loop-&gt;index 来获取当前迭代。

偶数/奇数情况的循环变量

对于其他用例,loop 变量有几个可以使用的属性和方法(如evenodd)。查看Blade documentation

偶数/奇数情况的 CSS 选择器

还有使用选择器的 CSS 解决方案,例如:nth-child(even)nth-child(odd) 分别用于偶数和奇数。

【讨论】:

  • 感谢您的反馈,我可以继续这个新视角。但是,如果我将您的@php 建议放在 foreach 之前,则未定义 key。你的意思是用你的第二个建议替换 $toggle = false 或 $toggle = !$toggle 吗?
  • 你应该用你自己的实现替换代码:$toggle = !$toggle。您在提供的示例中创建了它,我已将其用作我的第二个建议。如果这回答了您的问题,您能否将其标记为已回答?
  • 谢谢。如果我设法做出正确的行为,我会将其标记为已回答。现在我没有合适的交替。
  • 好的,如果您遇到任何问题,请告诉我!
【解决方案2】:
<tbody>
               @php($currentKey = null)     
               @foreach($data as $key => $line)
                        @if($key > 0)
                            <tr @if ($data[$key]['command_number'] != $currentKey) class="second"
                                @elseif()
                                @endif>

                                @foreach($line as $item)
                                    @if(($item == $line['quantity']) || ($item == $line['delivery']))
                                        <td>
                                            <strong>{{$item}}</strong>
                                        </td>
                                    @elseif($item == $line['hours'])
                                        <td>
                                            <strong style="color: red;">{{$item}}</strong>
                                        </td>
                                    @else
                                        <td>
                                            {{$item}}
                                        </td>
                                    @endif
                                @endforeach
                            </tr>
                        @endif
                    @php($currentKey = $data[$key]['command_number']) 
                    @endforeach
                </tbody>

【讨论】:

    猜你喜欢
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多