[CakePHP2.x]pagenater のカスタム化とURL取得

CakePHP

CakePHPのpagenaterは便利なんだけど、HTMLで返してきてしまうのでデザインとの絡みでどうしてもデフォルトのままではうまくいかない。
出来るだけ簡単にカスタム化すべく、解析してみた。

まず、現在の状態は以下で取得できる。

$this->Paginator->params($model);

$modelはモデル名を入れるが、省略可能である。
returnで返ってくる配列が現在のページ番号やページ数その他もろもろの情報である。
page:現在のページ番号
prevPage,pageCount:次、前のページがあるかどうかのbool値
pageCount:ページ数

で、次のページなどの情報はこの情報をもとに生成すればいいのだが、問題はベースのURLである。
URLは以下のメソッドで取得可能

$this->Paginator->url($options = array(), $asArray = false, $model = null)

$asArrayはデータを配列で返すかURLで返すかのフラグ、$modelはモデル名を入れるが、両方とも省略してOK。
問題は$optionsである。
どうも、引き継がれた情報は下記に入っており、下記をベースの情報をベースとして、ページやソートを変更する場合書き換えてurlメソッドに渡してあげればOKのようである。

$this->Paginator->options['url']

中身は例えば以下のような感じに入ってくる

Array ( [0] => 5 [page] => 2 [sort] => created [direction] => asc )

ちなみに[0] => 5 の部分であるが、例えば
hogehoge.jp/hoges/list/5
というように、アクションの後にIDなどを入れている場合につくようである。
ページ番号を変えたければpageの部分を3とかにしてあげればよく、例のURLであれば
/hoges/list/5/page:2/sort:created/direction:asc
というようなURLが帰ってくる。

これで、パラメータの引き継ぎとページ番号などの書き換え方が分かったので、あとはヘルパーなりエレメントなりで好きなように成形して出せばOKである。

タイトルとURLをコピーしました