FuelPHPのPaginationクラス

ページネーションクラスでは、レコードの改ページを設定することが出来ます。CakePHPでは、ビュー内で使用できるヘルパーとして作成されており、コントローラ内の$helpesrプロパティにデフォルトで登録されているため、ほとんど何も登録せずに利用することが出来ました。その点、FuelPHPでは、一定の前準備が必要です。それでは、FuelPHPのPaginationクラスについて調べてみたいと思います。

1. まず、ページネーションを利用するには、Paginationクラスに設定情報(config)をセットする必要があります。必要な設定情報を下記に記載します。

設定情報

  • pagination_url
    ページネーションで使用するURLを指定します。コントローラ内で、ページネーションデータを整理しますので、基本的に、コントローラ名/アクション名で指定します。
    例:Collectionコントローラのaction_indexで使用する場合は、 『pagination_url=’collection/index’』となります。
  • uri_segment
    ページ番号をコントローラに渡すためのセグメント番号を指定します。基本的に、第1セグメントがコントローラ名、第2セグメントがアクション名ですので、ほとんどの場合は、第3セグメントになる場合が多いと思います(モジュールを使ったり、controllerフォルダを階層分けしたときは、異なります)。初期値(デフォルト)は3ですので、省略すると第3セグメントが自動的に指定されます。
  • num_links
    表示するリンクの数。アクティブページより前のリンク数は、アクティブリンクを含んだ数、アクティブページより後のリンクは、指定したリンクの数になります。初期値は5です。
    例: ‘num_links’=>3と指定すると、最高で、前半3ページ(アクティブページの前2ページ)、後半3ページで最高6ページを表示します。

  • total_items
    ページネーションするデータの総データ件数を指定します。CakePHPでは、自動で計算してくれていましたので、必要なかったのですが、FuelPHPでは、あらかじめcount()メソッドで、取得しておく必要があります。
  • per_page
    1ページに表示するデータ件数を指定します。初期値(デフォルト)は、10です。
  • template
    ページネーションを作成する為に、HTMLマークアップを含む連想配列を指定します。 templateについては、下記に詳細を記述します。

2. 上記の設定情報を、Pagination::set_config()でセットします。

ページネーション用のSQLの発行

3. 次にSQLを発行するときに、LIMIT句で1ページに表示する件数を指定し、2ページ以降の表示のためにOFFSET句でオフセット値も指定します。

  • limit(Pagination::$per_page)
    設定情報の『’per_page’=> 』で指定した1ページあたりの総項目数をLIMIT句にセットします。
  • offset(Pagination::$offset)
    設定情報で指定した1ページあたりの表示データ件数($per_page)とURIで指定したページ番号($uri_segment)から自動的に計算されたオフセット値($offset)をOFFSET句にセットします。

4. 上記のデータをビューに渡せば、ビュー内でPagination::creat_links()をechoするだけで、templateでレイアウトされたページネーションが表示されます。それでは、ページネーション用のテンプレートを見てみましょう。

ページネーション用のテンプレート

5. 設定情報の’template’=>array()で、ページネーション用のテンプレートを指定します。実際に指定方法を見てみましょう。下記の例は、TwitterBootstrapを意識してマークアップしています。残念ながらFuelPHPのtemplateには、ページ番号ごとのマークアップの指定が出来ないみたいなので、TwitterBootstrapに合わせるには一工夫が必要です。

  • wrapper_start
    ページネーション全体を包む大枠の開始用のHTMLマークアップを指定します。
    例:’wrapper_start’=>'<div class=”pagination”><ul>’,
  • wrapper_end
    ページネーション全体を包む大枠の終了用のHTMLマークアップを指定します。
    例:’wrapper_end’=>'</ul></div>’,
  • page_start
    ページネーションのページ番号を表示する箇所の開始用のHTMLマークアップを指定します。TwitterBootstrapでは、不要です。
    例:’page_start’=>'<span class=”page-links’>’,
  • page_end
    ページネーションのページ番号を表示する箇所の終了用のHTMLマークアップを指定します。TwitterBootstrapでは、不要です。
    例:’page_end’=>'</span>’,
  • previous_start
    ページネーションの『<<Previous』を表示する箇所の開始用HTMLマークアップを指定します。
    例:’previous_start’=>'<li class=”previous”>’,
  • previous_end
    ページネーションの『<<Previous』を表示する箇所の終了用HTMLマークアップを指定します。
    例:’previous_end’=>'</li>’,
  • previous_inactive_start
    ページネーションの『<<Previous』がアクティブ時に表示する箇所の開始用HTMLマークアップを指定します。
    例:’previous_inactive_start’=>'<li class=”active”><a href=”#”>’,
  • previous_inactive_end
    ページネーションの『<<Previous』がアクティブ時に表示する箇所の終了用HTMLマークアップを指定します。
    例:’previous_inactive_end’=>'</a></li>’,
  • next_start
    ページネーションの『Next>>』を表示する箇所の開始用HTMLマークアップを指定します。
    例:’next_start’=>'<li class=”next”>’,
  • next_end
    ページネーションの『Next>>』を表示する箇所の終了用HTMLマークアップを指定します。
    例:’next_end’=>'</li></ul>’,
  • next_inactive_start
    ページネーションの『Next>>』がアクティブ時に表示する箇所の開始用HTMLマークアップを指定します。
    例:’next_inactive_start’=>'<li class=”active”><a href=”#”>’,
  • next_inactive_end
    ページネーションの『Next>>』がアクティブ時に表示する箇所の終了用HTMLマークアップを指定します。
    例:’next_inactive_end’=>'</a></li>’,
  • active_start
    ページネーションのページ番号がアクティブ時に表示する開始用HTMLマークアップを指定します。
    例:’active_start’=>'<li class=”active”><a href=”#”>’,
  • active_end
    ページネーションのページ番号がアクティブ時に表示する終了用HTMLマークアップを指定します。
    例:’active_end’=>'</a></li>’,
  • previous_mark
    ページネーションのPreviousの文字の前に表示するマークを指定します。特に指定しなくても初期設定で『<<』が適用されます。
  • next_mark
    ページネーションのNestの文字の後に表示するマークを指定します。特に指定しなくても初期設定で『>>』が適用されます。
  • ‘regular_start’及び’regular_end’
    勉強不足で済みません。これに関しては、全く分かりませんでした。誰か分かる方がいらっしゃいましたら教えて下さい。

6. 下記にページネーション用のテンプレートを図解しますので、参考にして下さい。

7. app/lang/jaにpagination.phpを作成して、下記のように記述すれば、『Previou』と『Next』が日本語表記に変わります。

app/lang/ja/pagination.php

<?php
return array(
 'previous' => '前頁へ',
 'next' => '次頁へ',
 );

8. 残念ながらOPERAでは、レイアウトが若干崩れますが、Chorme、FireFox、IE9では、大丈夫でした。

OPERA

FifeFox

具体例に関しては、『FuelPHPでページネーション(実践編その6)』をご参照下さい。本日は以上です。

尚、私事ではありますが、本ブログを開設して今日でちょうど200記事を突破いたしました。これもひとえに皆様のおかげです。ありがとうございました。これからも日々精進いたしますので、応援宜しくお願いいたします。ちなみに、検証途中で挫折して世に出なかった記事は50を超えているとは思います。 (^0^)

追伸

FuelPHPのver1.3ではPaginationクラスは、Paginateクラスに置き換えられる予定みたいです。ver1.3にバージョンアップするときは注意して下さい。

 

FuelPHP Ver1.3でもPaginationクラスのままでした。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ