2016-11-02 7 views
0

Скажем, у меня есть массив данных, который я хочу, чтобы отобразить в виде списка: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 может использоваться как инструмент для сращивания.

Но как использовать этот подход в файлах шаблонов? Есть ли другой подход, позволяющий сохранить код чистым и логичным, не добавляя ненужные условия, такие как проверка текущего элемента не является последним элементом массива?

Спасибо!

+0

Если вы не хотите, чтобы PHP обрабатывал это, вы могли бы использовать 'CSS' для установки свойства' display' последнего '.good-block''


'element to' none; ', что-то вроде' .good-block: last-child> hr {display: none; } '(' CSS' люди не стесняются исправить это) –

ответ

0

Простой фокус в том, чтобы держать $ счетчик, например, так:

@$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 

Теперь ваш час будет появляться только перед вашей записи, но он пропускает первый.

0

Вы можете сделать это в Клинка:

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 ($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