2014-11-22 2 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> 

각 아티스트의 첫 글자를 검사하는 조건부를 실행하여 올바른 시작 문자로 데이터를 그룹화 할 수 있습니다. 블레이드를 어떻게 생각하십니까? 도우미는 "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 

참고. 알파벳/숫자로 된 모든 문자를 원한다면 해시를 미리 채운 다음 줄여야합니다.

관련 문제