Tutorials

Einige nützliche Hilfen und Code-Schnipsel, die ich immer wieder benötige und deshalb hier für alle sammle.

Zurück zur Übersicht

Lavarel Blade: Rekursive Partials mit @each erstellen

#Tutorials#PHP

Möchte man etwas in Laravel Blade darstellen, etwas  ineinander verschachteltes darstellen, beispielsweise Kommentare oder Menüs, so kann man dies mit wenigen Handgriffen tun.

Sagen wir haben folgendes Array, welches Kommentare und Antworte zu Kommentaren enthält:


$comments = array(
  0 => array(
    'author' => 'Max',
    'comment' => 'Lorem Ipsum',
    'replies' => array(
      0 => array(
        'author' => 'Manfred'
        'comment' => 'Lorem Ipsum',
        'replies' => array()
      )
    )  
  ),
  1 => array(
    'author' => 'Max',
    'comment' => 'Lorem Ipsum',
    'replies' => array()
  ),
  2 => array(
    'author' => 'Max',
    'comment' => 'Lorem Ipsum',
    'replies' => array(
      0 => array(
        'author' => 'Manfred'
        'comment' => 'Lorem Ipsum',
        'replies' => array(
          0 => array(
           'author' => 'Max',
           'comment' => 'Lorem Ipsum',
           'replies' => array()
          ),
          1 => array(
            'author' => 'Max',
            'comment' => 'Lorem Ipsum',
            'replies' => array()
          ),
        )
      )
    )  
  ),
)

Um jetzt die Kommentare anzuzeigen benutzen wir die each Funktion von Blade.

@each('Partials.comment', $comments, 'comment', 'Partials.commentempty')

Dieser Code macht Folgendes:

  • Das Partial comment.blade.php wird geladen
  • Die Rekords die in $comments stehen werden übergeben
  • der Name comment wird als Variable für jeden Durchgang mitgegeben
  • Das Partials commentempty.blade.php wird benutzt, falls $comments leer ist

Das Ganze ist jetzt noch eine Kurzschreibweise von @foreach.

Jetzt kommt der Interessante Teil, das Partial, was sich selbst wieder benutzt:

<ul>
    <li>
    {{ $comment.comment}}
        @if (count($comment['replies']) > 0)
          @each('Partials.comment', $comment['replies'], 'comment')
        @endif
    </li>
</ul>

Der Trick an der Sache ist es, dass das Partial checkt, ob der derzeitige Kommentar noch Antworten hat und wenn ja wird wieder die @each Funktion mit sich selbst als Template geladen. So bekommt man eine rekursive verschachtelung.

Viel Spaß damit!


Kommentare

Es gibt noch keine Kommentare. Sei der Erste!

Hinterlasse einen Kommentar

Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Kommentar wird gespeichert
Danke für deinen Kommentar! Sobald er freigegeben wurde erscheint er hier.