StraightForward
StraightForward

Reputation: 63

Blade Template Layout Structure

I need to create a row for each 3 attachments. Something like

  @foreach($email->attachment as $attach)
     <div class="row">
       <div class="col-lg-4"></div>
       <div class="col-lg-4"></div>
       <div class="col-lg-4"></div>
    </div>
@endforeach 

   <div class="row">
       <div class="col-lg-4">1st attachment</div>
       <div class="col-lg-4">2nd attachment</div>
       <div class="col-lg-4">3rd attachment</div>
  </div>
  <div class="row">
      <div class="col-lg-4">4th attachment</div>
      <div class="col-lg-4">5th attachment</div>
      <div class="col-lg-4">6th attachment</div>
</div>

and so on! I had searched for the question but just found This link but It's actually different from my perspective. Thanks

Upvotes: 2

Views: 366

Answers (2)

Laurence
Laurence

Reputation: 60088

Use array_chunk - it is designed for this each purpose - so you can cut an array into sub-sizes and loop through each group

@foreach (array_chunk($email->attachment->toArray(), 3, true) as $array)
    <div class="row">
    @foreach($array as $attachment)
         <div class="col-lg-4">{{ $attachment['id'] }}</div>
    @endforeach
    </div>
@endforeach

And using @Lukasgeiter's comment - you could also do it this way if it is a Laravel Collection

@foreach ($email->attachment->chunk(3) as $array)
    <div class="row">
    @foreach($array as $attachment)
         <div class="col-lg-4">{{ $attachment->id }}</div>
    @endforeach
    </div>
@endforeach

Upvotes: 3

eusoj
eusoj

Reputation: 374

Try this, it's faster than generate 2 arrays:

  <div class="row">
    @foreach( $email->attachment as $index => $attach)
      <div class="col-lg-4">{{$attach}}</div>
      @if( $index+1 === 0)
        </div><div class="row">
      @endif
    @endforeach
  </div>

Upvotes: 0

Related Questions