FuelPHPでPagination

昨日の続きであるが、ルーティングの設定はZendFrameworkとは比べものにならないくらい簡単に終わった。2とは比べるレベルになく、1よりも簡単で、/fuel/app/config/routes.phpに1設定につき1行追加していくだけでルーティングの設定ができた。

最低限の設定しかしていないので、デフォルト値や、書式設定などが未完であるが、とりあえず、ZendFrameworkで作った時と同じURLでアクセス可能な状態に持って行けるようになった。

2ページ目に取り掛かり、こちらもすぐにできたが、こちらはページングを行うものを選んだ。

fuelPHPではPaginationクラスを使う。複数の方法、使い方があるようであるが、configを設定して、forgeする使い方にした。
まずは、次のようにオブジェクトを生成する。

$config = array(
‘uri_segment’  => 3,
‘num_links’   => 10,
‘per_page’    => 100,
‘total_items’  => $total,
‘show_first’   => true,
‘show_last’   => true,
);
$pagination = Pagination::forge(‘trackspagination’, $config);
$pagination->offset = $page;
$view->set_safe(‘pagination’, $pagination->render());

オプションにはURLの指定もあるのであるが、指定無しとして「自動生成」で上手く動作している。$total変数は別途SQLで取得したデータの総件数である。show_first, show_lastは先頭ページへ、最終ページへのリンクを表示するオプションである。
offsetに指定している$pageは現在ページを保持している変数である。
$pagination->render()で、オプション含めた全てのpaginationが文字列形式(HTML)で出力されるので、これをビューでそのまま出力すればよい。

デフォルトのpaginationの表示では、現在表示しているページに対するリンクを#でリンクする(例:htttp://localhost/controler/action/pageの時、http://localhost/#になる)。これであると、XAMPPでは間違えて現在ページのリンクを踏むと再表示ではなく、XAMPPのページに飛んでしまうので、リンクを無効にしたかった。

これをカスタマイズするには、/fuel/core/config/pagination.phpを/fuel/app/config/pagination.phpにコピーして、必要なところだけを書き換える。
書き換えたところを列挙すると、defaultを使っているのであるが、

‘first-inactive’ => “\n««\n\n”,
‘first-inactive-link’ => “”,
‘previous-inactive’ => “\n«\n\n”,
‘previous-inactive-link’ => “\t\t{page}\n”,
‘active’ => “\n\t{link}\n\n”,
‘active-link’ => “\t\t{page}\n”,
‘next-inactive’ => “\n»\n\n”,
‘next-inactive-link’ => “\t\t{page}\n”,
‘last-inactive’ => “\n»»\n\n”,
‘last-inactive-link’ => “”,

となる。これらが、無効になって欲しいリンクの指定になるので、リンクにならないようにaタグを除去した形にした。書式には変更をしていない。

CSSを調整していないので、表示が小さく、使いにくいのであるが、表示まではできた段階、ということで、まとめておく。

コメント