2014-11-22 61 views
0

現在,在我的控制器中,我將一些按字母順序排列的數據傳遞給我的探索視圖。使用刀片模板檢查字符串的第一個字符

public function browse() 
{ 
    return View::make('explore') 
    ->with('artists', Artist::orderBy('artist', 'ASC')->get()); 


} 

然後在視圖中,我使用Blade來循環這些信息。

<ul> 
      @foreach($artists as $artist) 
      <a href="/{{ $artist->artist }}"><li>{{ $artist->artist }}</li></a> 
      @endforeach 
</ul> 

我想運行一個條件檢查每個藝術家的第一個字母,這樣我可以進一步將數據按正確的起始字母分組。你如何使用Blade做到這一點?我看到助手「starts_with」,但我不太清楚如何將它實現爲條件語句。

回答

2

這個邏輯確實屬於視圖/模板層以外的其他位置。一個View Composer可能是一個更好的位置,或者甚至可能是一個模型方法來返回由開頭字母分隔的數據 - 從而返回每個字母下包含藝術家的數組的散列。

示例代碼:

class Artist extends Eloquent 
{ 
    public static function allByFirstCharacter() 
    { 
    $artists = Artist::orderBy('artist', 'ASC')->get(); 

    return $artists->reduce(function($sortedArtists, $artist) { 
     $firstChar = $artist->artist[0]; 

     if (!isset($sortedArtists[$firstChar])) { 
      $sortedArtists[$firstChar] = []; 
     } 

     $sortedArtists[$firstChar][] = $artist; 

     return $sortedArtists; 
    }, []); 
    } 
} 

// Controller 
$sortedArtists = Artist::allByFirstCharacter(); // Then pass it to the view 

// In view 

@foreach ($sortedArtists as $letter => $artists) 
    <!-- Some menu item or something similar here --> 
    @foreach ($artist as $artist) 
     <!-- Print out details of artist --> 
    @endforeach 
@endforeach 

注意,這個例子僅僅在現有的第一字符填滿。如果您希望在字母/數字中包含所有字符,則需要預先填充散列,然後將其減少。

相關問題