【FuelPHPの使い方】ページネーション機能の実装方法

始めに

このページは、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のおすすめ書籍

created by Rinker
¥4,750 (2022/12/06 06:33:35時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA