1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel 独自ページネーションを作成する方法】

Posted at

LaravelのbladeとIlluminate\Pagination\LengthAwarePaginatorインスタンスでカスタムページネーションを実装する。

目的

S3の画像を一覧表示したい

流れ

S3にあるオブジェクトURLを保存しているDBから配列でオブジェクトURLを取得→その配列をページネーションする。

#LengthAwarePaginatorクラスを使うときは、自分で配列かコレクションを分割しなければならない。配列ならarray_slice、コレクションならforpageなど。

1. bladeで表示する準備

・ページネーション済みの配列を回して、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. bladeで表示させるページネーションされた$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. bladeのcssを整える。

以下のようなページネーションが作れる。
94850F14-0E83-44A7-8EAF-506E1DA27498_4_5005_c.jpeg

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?