0
0

More than 1 year has passed since last update.

FuelPHP の Pagination を読んでみた。

Posted at

FuelPHP の Pagination を読んでみた

FuelPHP の Pagination を使っているコードを読んでいて、自分で Pagination を使った実装しようかと思ったけど、その前に仕組みが気になったので、FuelPHP の Pagination の内部実装を見てみました。

読む順番

Controller 側での pagination の初期化から、

$pagination = \Pagination::forge('name', $config)

View 側での レンダー処理の順で読んでいきます。

echo Pagination::instance('mypagination')->render();
// つまり
$pagination->render()

Pagination を読んでみる

__toString

<?php echo<?= echo で呼ばれる時など、string を cast された時に呼ばれます。その実装によると、render を呼び出しています。

render

__toString ですぐ呼ばれる関数。ここで、Pagination の HTML化を行っている。ここで、次に出てくる first, previous, pages_render, next, last の結果をつなげています。

first, previous, pages_render, next, last

first, previous, pages_render, next, last それぞれ、Pagination の 一番左のボタン(1番目)・その右のボタン(前へ)・真ん中のボタン群・一番右から一つ左のボタン(次へ)・一番右のボタン(最後)を表示する関数。
内容は全て簡単に言えば _make_link を呼び出していて url を変更した html を返しているだけになります。

_make_link

受け取った page のインデックス と $config 内の url の情報から、リンクを生成しています。実装は こちら にあります。
pagination だと $config の uri_segment に数字を渡すか文字列を渡すかで挙動が違うんですが、それも ここ に実装が載っていて、 数字だとパスに数字が、文字列だとクエリに数字が埋め込まれます。
そして最終的に、url と クエリが組み合わさります(実装だとここ)。

そのHTMLの結果が _make_link で返ってきて、render で組み合わされることになります。

最後に

少し端折って説明しましたが、意外と簡単に出来ていることは分かったのではないでしょうか?

0
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
0
0