Paginatorの使い方。Paginatorの使い方。CakePHP1.2【1.2の新機能CakePHP】spokPaginatorは設定項目が多くてたいへんなので覚書として書いておいた。ページングがとても簡単に扱えるのはたいへん助かる。こちらも詳しい(CakePHP:ページングを試す)のだけれど、せっかくソースも読んでみたので覚書。バージョン:CakePHP1.2betaこちらも参考:PagenatorでPaginateしてみた。Paginatorとはデータベースからたくさんのデータを引っ張ってきた時、一度に画面に出すと大変なので、自動的にページ分割をしてくれる機能。>>nextというやつ。データベースから直接引き出せる情報についてのみ例えばいったんデータベスから大量に引き出して加工してしまった配列そのものをページングしようとしてもできない。Paginatorはデータベースからの出力用を分割し(SQLのlimitステートメント)CakePHPで自動認識できるページリンクURLを作成するという検索と表示の2つの機能からできているから。1の機能のために、データベース検索条件をfindAllでなく、Paginatorに渡す(検索)2の機能のために。表示用PaginatorにURL用のデータを渡す(表示)という2つの作業が必要になる。これが結構似ているものだから、最初はとまどった。この区別をつけておかないとあとで混乱する。paginatorの役割であり、2の表示部分は、paginatorヘルパーのfunction群の役割である。表示リンク形式http://example.com/cake/~/page:3/sort:value/derection:asc/limit:10という形で、page,sort,derection,limitが計算される。自分(this)のpaginateメンバ変数に、パラメータを多重配列でセットする。簡単に言えばfindAllに渡す代わりに、paginatorに渡すというだけ。findAllよりもたくさんのパラメータを渡すことができるが、既存のfindAllをpaginatorに置き換えるだけで、十分に動く。int(数値,最初に表示するページ。int(数値:showでも可。重なった場合はsortが優先される。findAllに与える。);どのパラメータも必須ではない。設定されない場合はデフォルト値または全文検索となる。tipsカレントのモデル以外の検索条件の設定であれば、上記のパラメータを$this->paginate=array('モデル名',array(上記の多重配列))としてやれば設定できる。(uses設定は必要)上記のように$this->paginateに設定したら、$this->paginator();とPaginatorを呼び出すと、その返り値が、表示用の配列*3となる。したがって、$this->set('example',$this->paginator());として、viewに情報を渡してあげるのがよいでしょう。追加的なパラメータの渡し方なお、$this->paginator();には、さらにパラメータを設定できる。object(自分以外のモデルを指定できる*4*5省略可)。);以下のようなして方法が可能である。※検索条件のみを配列で与える。$this->paginateでoptionを設定し、さらにメンバ関数呼び出しの時に$this->paginator(array(検索条件))とした場合は、最後の条件で上書きされる。ソート時の留意点$this->paginate=array(検索条件)と$this->paginator(array(検索条件))の違いはパラメータのデフォルトとして認識されるかどうかである。$this->paginate=array(検索条件)で登録するとデフォルトとなる。このことは特にソート条件に大きな影響を及ぼす。後から、柔軟にソート条件を変えたい場合は、デフォルト登録せず、関数の引数にしたほうが無難だろう。*9どのような結果が返ってくるか。$recursive);の結果を返してくれる。paginateを定義しておくと、そちらで処理される(引数は同じ)。そのモデルだけで使うパラメータ、もしくは絶対に使ってはいけないパラメータをここでハックする、ということができるようになっているのでしょう。remember表示用のPaginatorヘルパーは、$this->paginateを実行すれば自動的に呼び込まれるので、明示的に呼んでおく必要はない。(もちろん、呼んでおいて構わない)。実行後に参照可能なパラメータこの処理後、以下のパラメータをセットしてくれている。今回実行されたoption)このパラメータを参照すれば、どのような結果になったかの概略を知ることが出来る。上記でようやく、データが揃った。そのページの表示は通常と同じ。>>nextみたいな表示は、viewでpaginatorヘルパーを使用する。PagenatorでPaginateしてみた。最終ページよりも大きい数値を指定した場合は、last指定と同じとなる。orderの場合はorder=array('key'=>'direction')で指定しなければならない。モデル名でもよいし、オブジェクトそのままでもよい。省略時は自分のモデル。whitelistは、URLから渡されたパラメータのうち、有効にするキーを設定する。これを設定しない場合は、「sort(order),limit(show),page」以外のキーは無効となる。セキュリティを考えれば、わかる人以外は、ここを設定してはいけない。引数として渡す場合は、この設定をしなくても処理してくれる。URLからの入力に対してものである。ページ指定とlimitは強制的に、1と20にデフォルト設定されている。http://www.cpa-lab.com/tech/053/tb/※お手数ですが、SPAM防止のためURLの後ろに「WBS」を追加してください。CakePHPを本気で勉強CakePHP1,2にはページングの機能があると聞き使ってみることに。始めて利用してみましたが、便利すぎますね。自分でComponentにページングの関数を書いていましたが馬鹿馬鹿しくなってしまいますよ。2.03.Infomation管理人のメインサイト。画像アルバムコンテンツPaginatorの使い方。29最近の記事さくらインターネットで空メールエラーmbstrings関数をPHPで使う際の必見サイトQdmailサイトと相互リンクただ簡単にメールを送りたいだけだったのにPHPPHPフレームワークで日本語メール送信。anonymousissetを正しく理解する。ほんじissetを正しく理解する。ほんじissetを正しく理解する。へびにっきissetを正しく理解する。