처음부터 차근차근

Pagination 본문

Framework/Laravel

Pagination

_soyoung 2022. 2. 16. 19:58
반응형

라라벨로 개발하면서 편리했던 기능 중 하나가 페이지네이션이다.

라라벨은 페이지네이션 기능을 사용하기 아주 쉽게 미리 만들어놨다.

짧게는 코드 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

반응형
Comments