처음부터 차근차근
Pagination 본문
라라벨로 개발하면서 편리했던 기능 중 하나가 페이지네이션이다.
라라벨은 페이지네이션 기능을 사용하기 아주 쉽게 미리 만들어놨다.
짧게는 코드 2줄 만으로도 페이지네이션을 구현할 수 있다.
사용 방법
기본적으로 라라벨의 paginator에서 생성된 HTML은 Tailwind CSS 프레임워크와 호환된다.
그러나 부트스트랩 페이지네이션 지원되기 때문에 부트스트랩을 이용한 페이지네이션을 만들었다.
1. 페이지를 매길 쿼리 마지막에다가 ->get() 대신 '->paginate(페이지 표시하려는 항목 수)'를 쓴다.
DB::table('goods')
->orderby('id', 'asc')
->paginate(3);
2. 부트스트랩과 호환하기 위해 App \ Providers \ AppServiceProvider 경로로 가서 boot() 함수의 내용을 아래와 같이 바꿔준다.
use Illuminate\Pagination\Paginator;// 위에 선언하기
public function boot()
{
Paginator::useBootstrap();
}
3. view 파일로 가서 아래와 같이 코드를 작성하면 페이지네이션이 나온다.
{{ $goods->links() }}
+ 페이지 당 표시 할 항목의 수는 기본 값인 3이다.
이렇게 하는 방법도 있지만 부트스트랩 기본 디자인이다 보니까 디자인이 별로라고 느껴질 수 있다.
이럴 땐 라라벨에서 제공하는 인스턴스 메소드를 사용해 수동으로 페이지네이션을 구현하여 디자인을 따로 변경하면 된다.
수동 구현 예시
<div style="text-align: center;">
@if ($goods->currentPage() > 1)
<a href="{{ $goods->previousPageUrl() }}"><i class="fa fa-chevron-left" aria-hidden="true"></i></a>
@endif
@for($i = 1; $i <= $goods->lastPage(); $i++)
<a href="{{$goods->url($i)}}">{{$i}}</a>
@endfor
@if ($goods->currentPage() < $goods->lastPage() )
<a href="{{$goods->nextPageUrl()}}"><i class="fa fa-chevron-right" aria-hidden="true"></i></a>
@endif
</div>
$goods->currentPage() : 현재 페이지의 번호를 가져옴
$goods->previousPageUrl() : 이전 페이지의 URL을 가져옴
$goods->nextPageUrl() : 다음 페이지의 URL을 가져옴
$goods->lastPage() : 마지막 페이지의 번호를 가져옴
$goods->url(페이지번호) : 지정된 페이지 번호의 URL을 가져옴
개인적으로 페이지네이션 귀찮기도 하고 복잡하고 어렵기도 해서 개발하는데 하나의 큰 산이라고 생각하는데 라라벨에서 미리 만들어 놓은거 그냥 쉽게 가져다 쓰니까 이래서 프레임 워크 사용한다는 생각이 들었다!
참고 사이트 :
라라벨 공식 문서 - https://laravel.kr/docs/8.x/pagination
stackoverflow - https://stackoverflow.com/questions/63892559/laravel-pagination-links-problem-with-the-design
'Framework > Laravel' 카테고리의 다른 글
laravel 브로드캐스트 이용해서 실시간 이벤트 구현 (0) | 2022.04.20 |
---|---|
부모 클래스의 함수 사용하기(중복 코드 처리) (0) | 2022.02.18 |
Laravel Model 관계(Eloquent Relationship) (0) | 2022.01.19 |
form validation과 jetstream, 로그인한 user 알아내기, 리소스 라우팅 (0) | 2022.01.18 |
package 다운로드, 파일 명명 규칙, 리소스 컨트롤러, form 값 받기, db update/delete/create, fillable (0) | 2022.01.16 |