cakephp でpearのpagerを使う!

2010年1月5日火曜日
  • このエントリーをはてなブックマークに追加
cakephpで検索など、urlが&でつなげるパラメータの場合、ページ送りも&page=2とかにしたい!が、

調べるとコアに手を入れたりと大変なのでpear のpagerを使ってみたいと思います。

パラメータの引継ぎまではこのようにして出来ましたが・・・


unset($this->params['url']['url']);
$i = 1;
$url = '?';
$num = count($this->params['url']);
foreach ($this->params['url'] as $key => $val){
$url .= $key.'='.$val;
if($i != $num) $url .= '&';
$i ++ ;
}

$paginator->options(array('url' => array('controller'=>'search','action'=>$url)));
?>


prev('<< 前へ',null, null, array('class'=>'disabled'));?>
| numbers();?>
next('次へ >>',null, null, array('class'=>'disabled'));?>





上記のままだと ?param=valu¶m2=value2¶m3=value3/page:1

とかになってしまう。。。

ですが、なんとかpearを駆使して?解決しました。

以下、viewでもエレメントにでも記述。


//コントローラーでlimitをsetしておく。
$url = $this->params['url']; // $paramsで指定する為のURLを一旦変数に
unset($url['url']); //先頭がurl=aaa&となるので削除
require_once 'Pager/Pager.php';
$total = $paginator->counter(array('format' => '%count%')); //cakephpのpaginatorから総数だけもらう
$params = array(
'mode' => 'sliding',
'perPage' => $limit, //ページごとに表示するアイテムの数を指定
'delta' => 5, //現在のページの前後に表示するページ番号の数
'separator' => '',
'curPageLinkClassName' => 'current',
'prevImg' => '« Previous',
'nextImg' => 'Next »',
'totalItems' => $total,//ページ付けするアイテムの数を指定
'urlVar' =>'page',
'path' =>'http://www.example.com/',
'append' => true,
'fileName' =>'search/',
'fixFileName' =>false,
'importQuery' =>false,
'extraVars' =>$url,

);
$pager = Pager::factory($params);

$links = $pager->getLinks();
$page_range = $pager->getPageRangeByPageId();
$page_range = range($page_range[0], $page_range[1]);

$link = '';
if ($links['pages'] != '') {
// 前のページ
if ($links['back'] != '') {
// クラスを付ける
$link .= str_replace('} else {
$link .= '' . $pager->getOption('prevImg') . '';
}
// 最初のページ
if ($links['first'] != '' && !in_array(1, $page_range)) {
$link .= $links['first'] . '....';
}
// ページ
$link .= $links['pages'];
// 最後のページ
if ($links['last'] != '' && !in_array($pager->numPages(), $page_range)) {
$link .= '....' . $links['last'];
}
// 次のページ
if ($links['next'] != '') {
// クラスを付ける
$link .= str_replace('
} else {
$link .= '' . $pager->getOption('nextImg') . '';
}
}
?>



上記の例だと検索時のパラーメータがそのまま付いてきて、
http://www.example.com/search/?param=value¶m2=value2&page=3
みたいなURLができました。

ラベル: ,


0 件のコメント:

コメントを投稿