现在,在我的控制器中,我将一些按字母顺序排列的数据传递给我的探索视图。
public function browse()
{
return View::make('explore')
->with('artists', Artist::orderBy('artist', 'ASC')->get());
}
然后在视图中,我正在使用Blade循环查看该信息。
<ul>
@foreach($artists as $artist)
<a href="/{{ $artist->artist }}"><li>{{ $artist->artist }}</li></a>
@endforeach
</ul>
我想运行一个条件来检查每个艺术家的第一个字母,以便我可以在正确的起始字母下进一步分组数据。你会怎么用Blade做到的?我看到帮助器“starts_with”但我不太确定如何将其实现为条件。
答案 0 :(得分:2)
这个逻辑真的属于视图/模板层以外的某个地方。 View Composer可能是一个更好的位置,或者甚至可能是一个模型方法,用于返回以开头字母分隔的数据 - 从而返回包含每个字母下的艺术家的数组的哈希值。
示例代码:
class Artist extends Eloquent
{
public static function allByFirstCharacter()
{
$artists = Artist::orderBy('artist', 'ASC')->get();
return $artists->reduce(function($sortedArtists, $artist) {
$firstChar = $artist->artist[0];
if (!isset($sortedArtists[$firstChar])) {
$sortedArtists[$firstChar] = [];
}
$sortedArtists[$firstChar][] = $artist;
return $sortedArtists;
}, []);
}
}
// Controller
$sortedArtists = Artist::allByFirstCharacter(); // Then pass it to the view
// In view
@foreach ($sortedArtists as $letter => $artists)
<!-- Some menu item or something similar here -->
@foreach ($artist as $artist)
<!-- Print out details of artist -->
@endforeach
@endforeach
请注意,此示例仅填充现有的第一个字符。如果你想要字母/数字中的所有字符,你需要预先填充哈希值,然后减少它。