模板化:显示带分隔符的项目列表的最佳方法是什么?

时间:2016-11-02 19:16:33

标签: php html template-engine templating

让我们说我有一个数据数组,我希望将其显示为列表:

$goods = [
    ['title' => 'First item', 'description' => 'First item description'],
    ['title' => 'Second item', 'description' => 'Second item description'],
    ['title' => 'Third item', 'description' => 'Third item description']
];

以下观点:

<div class="good-block">
    <h1>{{ $good['title'] }}</h1>
    <p>{{ $good['description'] }}</p>
</div>

现在我想使用<hr>作为分隔符显示所有项目。

因此,最终观点如下:

@foreach ($goods as $good)
    <div class="good-block">
        <h1>{{ $good['title'] }}</h1>
        <p>{{ $good['description'] }}</p>
    </div>
    <hr />
@endforeach

问题在于,显然,分隔符将显示在最后一个项目之后,而不仅仅是元素之间。在简单数组的情况下implode可以用作拼接工具。

但是如何在模板文件中使用这种方法?是否有不同的方法,允许保持代码清洁和逻辑,而不添加不必要的条件,如检查当前元素不是数组的最后一个元素?

谢谢!

2 个答案:

答案 0 :(得分:0)

一个简单的诀窍就是保留一个$ counter,如下所示:

@$counter = 0;
@foreach ($goods as $good)
    @if ( $counter > 0 ) print '<hr />';
    <div class="good-block">
        <h1>{{ $good['title'] }}</h1>
        <p>{{ $good['description'] }}</p>
    </div>
    @$counter++
@endforeach

现在你的人力资源只会在你输入之前出现,但它会跳过第一个。

答案 1 :(得分:0)

你可以在Blade中执行此操作:

https://laravel.com/docs/5.3/blade#loops

@foreach ($goods as $good)
    <div class="good-block">
        <h1>{{ $good['title'] }}</h1>
        <p>{{ $good['description'] }}</p>
    </div>
    @if (!$loop->last)
    <hr />
    @endif
@endforeach

但是,如果你没有使用刀片,你可以在foreach循环中使用一个关键变量,如下所示:

@foreach ($goods as $index => $good)
    <div class="good-block">
        <h1>{{ $good['title'] }}</h1>
        <p>{{ $good['description'] }}</p>
    </div>
    @if ($index < count($goods) - 1)
    <hr />
    @endif
@endforeach
相关问题