В настоящее время у меня есть этот кусок кода:
<div class="row">
<?php $i = 1; ?>
@foreach($contest->submissions as $submission)
<div class="col-md-3">
<a href="/contests/{{ $contest->id }}/submissions/{{ $submission->id }}">
{!! HTML::image('/images/' . $submission->filename) !!}
</a>
</div>
@if($i % 4 == 0)
</div><div class="row">
@endif
<?php $i++; ?>
@endforeach
</div>
Я вставляю 4 представления за раз, как бы я делал это с постами WordPress. Использование оператора модуля для проверки остатка.
Этот код кажется действительно взломанным и собранным вместе, хотя. Я использую laravel 5, кто-нибудь может помочь очистить это и сделать его более компактным и аккуратным?
В вашем коде нет ничего плохого, он не выглядит взломанным, вы просто отображаете коллекцию обычным способом. Я могу предложить пару изменений, но в них нет абсолютной необходимости:
1. Избавьтесь от ручного объявления и увеличения $i
переменная, так как у вас уже есть доступ к индексу коллекции из foreach
заявление:
@foreach($contest->submissions as $i => $submission)
...
@endforeach
2. Использовать именованный маршрут для вашего URL (это позволит легко вносить изменения в структуру URL только в определение маршрута и избегать необходимости проходить все места, которые он использует, чтобы изменить его):
Route::get('/contests/{contestId}/submissions/{submissionId}', ['as' => 'contest.submissions', ...]});
Конечный результат будет выглядеть примерно так:
<div class="row">
@foreach ($contest->submissions as $i => $submission)
<div class="col-md-3">
<a href="route('contest.submissions', [$contest->id, $submission->id])">
{!! HTML::image('/images/' . $submission->filename) !!}
</a>
</div>
@if (($i + 1) % 4 == 0)
</div><div class="row">
@endif
@endforeach
</div>
То, что Laravel выразителен и лаконичен, не означает, что в нем можно все сделать с помощью двух строк кода.
Других решений пока нет …