5
votes

Comment générer des lignes paires et impaires dans laravel

J'ai un projet dans lequel je tire des articles de la base de données et les affiche sur la page d'accueil. Comme un blog. (Sur la page d'accueil, je limite cela à 3 articles)

J'ai 6 lignes dans le tableau, et je voudrais styliser la sortie en fonction des lignes ODD et Pair.

Voici mon contrôleur:

if ($counter == odd)
<div class="odd">
else
<div class="even">

Je veux que les lignes paires aient

et les lignes impaires à avoir

Quand je dd sur $ counter j'obtiens la valeur 6. Ceci est correct. J'ai 6 lignes dans le tableau.

Ce que j'essaie actuellement d'après d'autres articles que j'ai trouvés:

@foreach ($posts as $post)
@if($counter % 2 == 0)
<div class="even">{{$post->title}}</div>
@else
<div class="odd">{{$post->title}}</div>
@endif

Cela ne fonctionne pas n'importe quoi. Affiche toujours les lignes sous la forme 6,5,4,3,2,1

Alors, comment puis-je écrire l'instruction IF dans ma boucle Foreach pour dire ...

public function index()
{
   $counter = Post::count();
   $posts= DB::table('posts')->orderBy('id', 'DESC')->limit(3)->get();

    return view('home',compact('posts','counter')); 
}
  • Impair
  • Paire
  • Impair
  • Paire


0 commentaires

3 Réponses :


15
votes

$ counter est une variable statique, donc appeler $ counter% 2 == 0 affichera toujours le même résultat. Si vous utilisez la version 5.4+, il existe une variable $ loop incluse dans @foreach () . Ainsi, vous pouvez accéder à votre division de mod dans la boucle.

@foreach ($posts as $post)
    @if($loop->iteration % 2 == 0)
        <div class="even">{{$post->title}}</div>
    @else
        <div class="odd">{{$post->title}}</div>
    @endif
@endforeach


2 commentaires

J'utilise 5.7 Je n'avais aucune idée de la variable $ loop. Cela a très bien fonctionné. Dans ce cas, $ counter ne serait alors pas nécessaire, n'est-ce pas?


C'est correct, $ loop devrait pouvoir le gérer. Je suis passé à la version 5.4 quand j'ai découvert le truc $ loop . Vient si souvent utile.



1
votes

Vous devez incrémenter le compteur à chaque itération.

@php
  $counter = 1;
@endphp

@foreach ($posts as $post)
  @if($counter % 2 == 0)
   <div class="even">{{$post->title}}</div>
  @else
   <div class="odd">{{$post->title}}</div>
  @endif
  @php 
   $counter++;
  @endphp
@endforeach


1 commentaires

Cela fonctionne aussi bien, mais la variable $ loop semble un peu plus propre à l'OMI. Merci pour l'aide.



4
votes

Laravel 5.8.5 ajoute des indicateurs booléens pairs et impairs dans la variable de boucle Blade

Vous pouvez maintenant utiliser:

$ loop-> pair ou $ loop-> impair

Au lieu de

$ loop-> itération% 2

Lien de référence


0 commentaires