【fuelphp】Paginationをカスタマイズして使う手順

はじめに

仕事でちゃんとWebページ作ると避けて通れないのがページングかと思います。
で、過去にはやったことあるとは思うのですがやっぱり少し時間かかりました。
次回、同じことがないようにメモしておきます

configの設定

まず、
fuel/config/pagination.phpをapp/config/pagination.phpへコピー

こうすることでfuelphpのデフォルトのページャーの設定が上書きできるようになります。

で、後はサイトごとのデザインによってHTMLを書き換える形になると思います。
今回はBootstrap製のAdminLTEを使用したため以下のような形になりました。
また、今回は「myPagination」という名前で設定を定義しました。

app/config/pagination.php

return array(

    // the active pagination template                                                                                                                                                                              
    'active'                      => 'myPagination',

    // default FuelPHP pagination template, compatible with pre-1.4 applications                                                                                                                                   
    'myPagination'                     => array(
        // ページャ全体を囲うdiv
        'wrapper'                 => "<div class=\"dataTables_paginate paging_simple_numbers\" id=\"example1_paginate\"><ul class=\"pagination\">\n\t{pagination}\n</ul></div>\n",
        // 先頭ページへのリンク設定
        'first'                   => "<span class=\"first\">\n\t{link}\n</span>\n",
        'first-marker'            => "&laquo;&laquo;",
        'first-link'              => "\t\t<a href=\"{uri}\">{page}</a>\n",

        'first-inactive'          => "",
        'first-inactive-link'     => "",

        // 前のページへのリンクの設定
        'previous'                => "<li class=\"paginate_button previous\" id=\"example1_previous\">\n\t{link}\n</li>\n",
        'previous-marker'         => "Previous",
        'previous-link'           => "\t\t<a href=\"{uri}\" rel=\"prev\">{page}</a>\n",
        // 前のページへのリンクがない場合(:=現在先頭ページの場合)
        'previous-inactive'       => "<li class=\"paginate_button previous disabled\" id=\"example1_previous\">\n\t{link}\n</li>\n",
        'previous-inactive-link'  => "\t\t<a href=\"#\" rel=\"prev\">{page}</a>\n",

        // 各ページ番号を表示する領域の設定
        'regular'                 => "<li class=\"paginate_button\">\n\t{link}\n</li>\n",
        'regular-link'            => "\t\t<a href=\"{uri}\">{page}</a>\n",
        // 現在いるページの表記の表記
        'active'                  => "<li class=\"paginate_button active\">\n\t{link}\n</li>\n",
        'active-link'             => "\t\t<a href=\"#\">{page}</a>\n",
        // 次のページへのリンクの設定
        'next'                    => "<li class=\"paginate_button next\" id=\"example1_next\">\n\t{link}\n</li>\n",
        'next-marker'            => "Next",
        'next-link'               => "\t\t<a href=\"{uri}\" rel=\"next\">{page}</a>\n",
        // 次のページへのリンクがない場合(:=現在最終ページの場合)
        'next-inactive'           => "<li class=\"paginate_button next disabled\" id=\"example1_next\">\n\t{link}\n</span>\n",
        'next-inactive-link'      => "\t\t<a href=\"#\" rel=\"next\">{page}</a>\n",
        // 最終ページへのリンク設定
        'last'                    => "<span class=\"last\">\n\t{link}\n</span>\n",
        'last-marker'             => "&raquo;&raquo;",
        'last-link'               => "\t\t<a href=\"{uri}\">{page}</a>\n",

        'last-inactive'           => "",
        'last-inactive-link'      => "",
    ),
);

Paginationを使う

例はコントローラ

class Controller_Sample_Index extends Controller
{
    public function action_index()
    {
        // ページャー設定名
        $pagingName = "myPagination";

        // 1ページ表示数
        $perPage = 30;

        // 全データ数
        $allNum = 1000;

        // ページング                                                                                                                                                                                              
        $config = array(
            'name'                  => $pagingName,
            'per_page'              => $perPage,
            'uri_segment'           => 'p',
            'total_items'           => $allNum,
        );
        $pagination =Pagination::forge($pagingName, $config);

        // 表示すべきOffset
        $offset = $pagination->offset
        
        // データベースなどからデータを取得
        // $offsetから$perPage件データを取得

        ・・・
    }
}

テンプレート(例はviews)

<div class="row">
  <div class="col-sm-7">
    <?php echo Pagination::instance("myPagnation")->render(); ?>
  </div>
</div>

調べればどうってことないとは思いますが、次回使うときにまた調べることになりそうだったのでメモしておきます

以上です