【Laravel 독자 페이지 네이션을 작성하는 방법】

Laravel의 blade와 Illuminate\Pagination\LengthAwarePaginator 인스턴스에서 커스텀 페이지네이션을 구현한다.

목적

S3의 이미지를 나열하고 싶습니다.

흐름

S3에 있는 오브젝트 URL을 보존하고 있는 DB로부터 배열로 오브젝트 URL을 취득→그 배열을 페이지네이션한다.

# LengthAwarePaginator 클래스를 사용할 때는 직접 배열이나 컬렉션을 나누어야합니다. 배열이라면 array_slice, 컬렉션이라면 forpage 등.

1. 블레이드로 표시할 준비



· 페이지 네이션 된 배열을 돌려 s3에 저장된 이미지를 나열합니다.
<div class="container">
   @foreach ($s3ImgUrls as $objectrl)
       <img src="https://S3バケット名.s3-リージョン名.amazonaws.com/{{ $objectUrl }}" >
   @endforeach
</div>

{{ $s3imgUrls->links('vendor/pagination/semantic-ui') }}
links() 에서는, 이하의 커멘드로 생성된 view/vender/pagination내의 몇개의 몇개의 blade의 하나를 지정하고 있다.
php artisan vendor:publish --tag=laravel-pagination

2. 블레이드로 표시할 페이지화된 $s3imgUrls 를 생성한다.



포인트는, 요구된 페이지수에 의해 array_slice() 로 잘라내는 범위를 바꾸고 있는 곳.
$array = //独自ペジネータ配列の全体像
$display_limit = 3
$arrayOfNum = ((int)($request->page ?? 1) - 1) * $display_limit;
$sliced_items = array_slice($array, $arrayOfNum, $display_limit);

$s3ImgUrls = new LengthAwarePaginator(
            $sliced_items,     // 現在のページのsliceした情報(items)
            count($array),       // 総件数(total)
            $display_limit,      // 1ページに表示される数 (perPage)
            $currentPage,        // 現在のページ(ページャーの色がActiveになる)(currentPage)
            ['path' => $url]     // ページャーのリンクを指定
        );

3. 블레이드 CSS를 정돈.



다음과 같은 페이지네이션을 만들 수 있다.

좋은 웹페이지 즐겨찾기