Posts tagged pagination
CakePHP Pagination まとめ
2CakePHP の Pagination に関してまとめてみました。
コントローラでコンポーネント、ヘルパーに Pagination を指定
// 使用コンポーネント名 var $components = array('Pagination'); // 使用ヘルパー名 var $helpers = array('Pagination');
コントローラの一覧表示するアクションでの一覧表示取得方法
$this->Pagination->modelClass = 'Model'; // 使用するモデル $this->Pagination->sortBy = 'created'; // デフォルトのソートするフィールド名 $this->Pagination->direction = 'DESC'; // デフォルトの昇順、降順を指定 $this->Pagination->show = 10; // 1ページに表示する件数 $conditions = array(); // 検索条件 list($order,$limit,$page) = $this->Pagination->init($conditions); $lists = $this->Model->findAll($conditions, $fields, $order, $limit, $page, $recursive);
ビューでのヘルパー使用準備
ビューで Pagination ヘルパーを使用できるようにする
< ?php $pagination->setPaging($paging); ?>
ビューでの総件数と表示している件数の表示
< ?php echo $pagination->result('検索結果:', '/', '?'); ?>件
上記のように指定すると「検索結果:1?10/5253件」と表示されます。
ソートするフィールドを変更するリンクを表示する
< ?php echo $pagination->sortBy('field_name', 'フィールド名', 'ModelName'); ?>
field_name にソートするフィールド名、
フィールド名にリンクに表示する名前、
ModelName にはフィールド名が属するモデル名
を指定します。
モデル名は $this->Pagination->modelClass と同じ場合には省略可能です。
また、sortBy メソッドは
veiws/heplers/pagination.php
function sortBy ($value, $title=NULL, $Model=NULL,$escapeTitle=true,$upText=' ^',$downText=' v')
のように定義されています。見て分かるとおり第5、6引数を指定することにより、ソートしたときのリンクのフィールド名につく「^」「v」の文字を変更することができます。
select タグによってソートを指定したいときは sortBySelect メソッドがあります。
function sortBySelect($sortFields, $t='Sort By: ',$upText=' ^',$downText=' v')
PEAR::Pager ページ番号を PATH_INFO で渡す
3ページング処理を行ってくれる PEAR::Pager 、かなり便利です。
通常は
index.php?pageID=2
のようにしてページ番号を渡すのですがこれをPATH_INFO で渡すには下記のようにオプションパラメータを指定します。
$params = array( ... 'path' => 'http://localhost/foo/', 'fileName' => '%d', 'append' => false, cuurentPage => 現在のページ );
ポイント
append = false なら fileName の %d にpageID を埋め込む。
currentPage を指定しないと Pager が現在のページが分からない。
fileName
'path' => 'http://localhost/', 'fileName' => 'foo/%d'
なども可能。append=false なら fileName の %d にpageID を埋め込むということ。
現在のページを取得するには
$path_info = explode("/", $_SERVER['PATH_INFO']); if (isset($path_info[1]) { $currentPage = $path_info[1]; } else { $currentPage = 1; }
PATH_INFO が使用できるか
サーバによっては PATH_INFO が使用できない。
使用できるかは $_SERVER["PATH_INFO"] が存在するかどうか。
ただし、http://localhost/index.php では $_SERVER["PATH_INFO"] には値はセットされないので、 http://localhost/index.php/1 などのようにして $_SERVER["PATH_INFO"] が設定されているか調べる。