splendidkeen
4 months ago

Horizontal row, odd logic

Posted 4 months ago by splendidkeen

Yesterday, I learned how to implement a "space-filler" logic within a foreach loop (Thank you, @ftiersch), which checks if the number of the $collection is odd. If it is the case, it implements a "space-filler" to the current pagination, as I paginate(2). (Vertical loop)

// if odd
$users->count() % 2 != 0

This logic is super for a vertical foreach loop. If we imagine a horizontal loop, where we implement a row with three elements per row col-md-4, and max. our collection to lets say six elements (limit(6)->get() or paginate(6)), how could we fill the spaces per row, with the same logic in mind as within the vertical loop.

Currently a space filler logic looks like this:

1.) I limit the $collection within my Controller to e.g. 6.

And within my view, I implement this logic, and for every case either show one space filler or two (simple partials):

@if($users->count() == 1) 

<div class="row">
@foreach($users as $user)
<div class="col-md-4"> 
<p>{{$user->name}}</p> 
</div> 
@endforeach
<div class="col-md-4"><p>space-filler</p></div>
<div class="col-md-4"><p>space-filler</p></div>
</div>

@elseif($users->count() == 2) 
    
<div class="row">
@foreach($users as $user)
<div class="col-md-4"> 
<p>{{$user->name}}</p> 
</div> 
@endforeach
<div class="col-md-4"><p>space-filler</p></div>
</div>

@elseif($users->count() == 3) 

<div class="row">

@foreach($users as $user)
<div class="col-md-4"> 
<p>{{$user->name}}</p> 
</div> 
@endforeach
</div>

@elseif($users->count() == 4) 
... same as 1
@elseif($users->count() == 5) 
... same as 2
@elseif($users->count() == 6)
... same as 3
@endif 

Is there a more dynamic or efficient solution for that logic, a less redundant one? E.g.:

If I only count 1 User, I get 5 "space fillers"? (Horizontal loop)

Please sign in or create an account to participate in this conversation.