CakePHP のページネーション機能を使うと、/hoge/fuga/page:2 のようなコロン区切りパラメータのリンクになってしまいます。
これは気持ち悪いので、何とか /hoge/fuga?page=2 にする方法を考えました。
やはり気になっている方はいるようです。
ページが見つかりませんでした | 15Pub
まず、フレームワークの PaginatorHelper を app/views/helpers 以下にコピーします。
$ cp cake/libs/view/helpers/paginator.php app/views/helpers/
次に、コピーした paginator.php の url メソッドを編集します。
<?php /** * Merges passed URL options with current pagination state to generate a pagination URL. * * @param array $options Pagination/URL options array * @param boolean $asArray * @param string $model Which model to paginate on * @return mixed By default, returns a full pagination URL string for use in non-standard contexts (i.e. JavaScript) */ function url($options = array(), $asArray = false, $model = null) { (.. snip ..) if (isset($url['order'])) { $sort = $direction = null; if (is_array($url['order'])) { list($sort, $direction) = array($this->sortKey($model, $url), current($url['order'])); } unset($url['order']); $url = array_merge($url, compact('sort', 'direction')); } $url = array('?' => $url); // この行を追加する if ($asArray) { return $url; } return parent::url($url); }
最後に、app/config/bootstrap.php に以下を追加し、この編集済み Paginator が読み込まれるようにします。
<?php App::import('Helper', 'Paginator', array('file' => '../app/views/helpers/paginator.php'));
たぶんこれで大丈夫なはずですが、もっと良い方法・問題などありましたら是非教えてください。
フレームワーク書き換えのテクニックは、以下の記事が参考になりました。ありがとうございます。
CakePHP フレームワークのソースをapp/で置き換える - Shin x blog