模板化:显示带有分隔符的项目列表的最佳方式是什么?
Templating: what is the best way to display list of items with separators?
假设我有一个要显示为列表的数据数组:
$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
可以作为拼接的工具。
但是如何在模板文件中使用这种方法呢?有没有不同的方法,允许保持代码干净和逻辑,而不添加不必要的条件,比如检查当前元素不是数组的最后一个元素?
谢谢!
一个简单的技巧是保留一个 $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
现在您的 hr 只会出现在您输入之前,但它会跳过第一个。
您可以在 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
但是,如果您不使用 blade,则可以像这样在 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
假设我有一个要显示为列表的数据数组:
$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
可以作为拼接的工具。
但是如何在模板文件中使用这种方法呢?有没有不同的方法,允许保持代码干净和逻辑,而不添加不必要的条件,比如检查当前元素不是数组的最后一个元素?
谢谢!
一个简单的技巧是保留一个 $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
现在您的 hr 只会出现在您输入之前,但它会跳过第一个。
您可以在 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
但是,如果您不使用 blade,则可以像这样在 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