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 で組み合わされることになります。
最後に
少し端折って説明しましたが、意外と簡単に出来ていることは分かったのではないでしょうか?