2010-03-09

CakePHP(1.2.6)のpaginationで検索条件を引き継ぐ

今仕事でCakePHPを使っているんですが、こういうフレームワークってルールを覚えるのが大変ですね。命名ルールを覚えたりメソッドの動作順序を覚えたり…

今日はpaginationで検索条件(GETパラメータ)を引き継ぐ方法がよくわからなくていろいろ調べていたんですが、view内で$paginator->options($options)に渡す$options['url']['?']にデータ(連想配列かクエリ文字列)を入れておくと検索条件を引き継げるみたいです。

$search_params; // 連想配列かクエリ文字列

// passedArgsがあるとソートのキーも引き継いでくれます
$paginator->options(
array('url' => array('?' => $search_params) + $this->passedArgs)
);

$search_paramsは$this->params['url']から必要なデータを抜き出したものをcontroller内で作って$this->set()しておくか、view内で作ります($this->params['url']をそのまま$search_paramsにすると$this->params['url']['url']のせいで上手くいかないです)。

これで一応できるんですが、こういう処理はできればcontroller内でやりたい…。なのでcontrollerでどうやってやるのかもうちょっと調べてみます。

(クリボウの Blogger Tips: コードをハイライトする「Blogger Syntax Highlighter」ウィジェット を参考にシンタックスハイライトを入れてみました)

追記(3月12日)

CakePHPのpaginateにURLパラメータを渡す方法 - iakioの日記経由の極める routes.php (CakePHP 1.2) : akiyan.comでcontrollerでオプションを設定する方法を知りました。ただiakioの日記さんにもあるようにControllerクラスでオプションを設定するとNoticeエラーが出るのでやめました。消されてしまうlimitを使っている$paginator->counter()のstartとendが変な値になりますね…。