このページは、PHPのフレームワーク「FuelPHP」の学習中の僕がメモとして残しているものです。内容に間違いがあればご連絡いただけると幸いです。
このページではFuelPHPを使ってページネーション機能を実装する方法について解説しています。
あらかじめ用意されている、Paginationクラスを使えば1から作らなくても、簡単に作ることが可能です。
ページネーションの実装方法
まず、ページネーションを実装するにはコントローラ内で、以下の項目を設定する必要があります。
設定項目 | 意味 |
pagination_url | リンク先のURL |
total_items | 全データの件数 |
per_page | 1ページにあたりの表示件数 |
uri_segment | URIセグメント番号 |
num_link | 表示するリンク数 |
「URIセグメント番号」というのが少しわかりにくいかもしれませんが、例えば商品一覧画面のURLが「https://fuelphp.com/product/list」だとすると「product」が第一セグメント、「list」が第二セグメントになります。
ページネーションをする際は、「https://fuelphp.com/product/list/1」や「https://fuelphp.com/product/list/2」のようにして、ページを管理するため「uri_segment」には第三セグメント、つまり「3」を指定することになります。
そして、上記の設定情報を、配列を使って次のように格納し変数に代入します。
// ページネーションのための設定
$config = array(
'pagination_url' => 'product/list',
'total_items' => $count, //DBからレコード数を取得しセット
'per_page' => 8, //1ページあたりの表示数
'uri_segment' => 3, //URIセグメント番号
'num_link' => 3, //表示するリンクの数
);
設定ができたら、それを使って、paginationインスタンスを生成します。
$pagination = Pagination::forge('mypagination', $config);
そして、次のように記述し商品データの一覧を取得します。
ここでは、LIMIT句、OFFSET句を指定しているので、1ページに表示する件数だけを取ってくることになります。
$products = DB::select()
->from('products')
->limit($pagination->per_page)
->offset($pagination->offset)
->execute()
->as_array();
あとはViewに割り当て、returnでviewに返すだけです。
$view = View::forge('template/index');
$view->set('head',View::forge('template/head'));
$view->set('header',View::forge('template/header'));
$view->set('contents',View::forge('home'));
$view->set('footer',View::forge('template/footer'));
$view->set_global('product',$products);
$view->set_safe('pagination', $pagination); //set_safeを使うことに注意!
return $view;
$paginationの中身はpreviousやnext、番号のリンクなどのHTMLタグが入っています。
そのため、$viewにセットする際はset()ではなく、set_safe()を使ってエスケープする必要があるので注意してください。
もし、set()でViewに割り当ててしまうと、画面上には下のようにHTMLのコードで表示されます。
ページネーション処理のサンプルコード
public function action_index(){
// DBから商品の件数を取得
$count = Model_Products::count();
// ページネーション設定
$config = array(
'pagination_url' => 'test.com/product/list',
'total_items' => $count,
'per_page' => 12, //1ページあたりの表示数
'uri_segment' => 3,
'num_link' => 3, //リンクの数
);
// Pagination インスタンス生成
$pagination = Pagination::forge('mypagination', $config);
// 設定した件数の商品データを取得
$products = DB::select()
->from('products')
->limit($pagination->per_page)
->offset($pagination->offset)
->execute()
->as_array();
//ビューの割り当て
$view = View::forge('template/index');
$view->set('head',View::forge('template/head'));
$view->set('header',View::forge('template/header'));
$view->set('contents',View::forge('home'));
$view->set('footer',View::forge('template/footer'));
$view->set_global('products',$products);
$view->set_safe('pagination', $pagination);
//ビューの返却
return $view;
}
ページネーションのデザイン(CSS)について
デフォルトでは、下のようなシンプルなものが出来上がります。
なので、サイトに合わせてCSSを書く必要があります、BootstrapのCSSを使う場合、CSSを書かなくてもそれっぽい感じのデザインにすることはできます。
やり方ですが、「core/config/pagination.php」を、「app/config/」の中にコピーします。
コピーができたら、app/config配下のpagination.phpを開き、
'active' => 'default',
と書かれた項目があるので、この’default’を’bootstrap’に変更するだけです。
FuelPHPのおすすめ書籍
(2024/11/23 17:59:21時点 Amazon調べ-詳細)