CakePHP1.2.4.8284のページャーの全メソッドと引数を解説。
公式マニュアルには$paginatorの解説が全く載っていません。
マニュアルでは「$paginator->numbersで前後10件ずつ表示したい」「1ページ目にリンクしたい」すら解決できません。
他に解説しているところもほとんど見あたりませんでした。
仕方ないのでソースから解読。
よくわかんないところは想像で適当に補っています。
特に$optionsの中身とかはさっぱりわからないので間違っている可能性大。
| first ( [ $first [ , $options ] ] ) | |
|---|---|
| 1ページ目へのリンクを作成 | |
| 引数 | 解説 |
| $first | リンクに表示する文字 |
| $options | 要素はtag,after,model,separator,url,update |
| last ( [ $last [ , $options ] ] ) | |
|---|---|
| 最終ページへのリンクを作成 | |
| 引数 | 解説 |
| $last | リンクに表示する文字 |
| $options | 要素はtag,before,model,separator,url,update |
| prev ( [ $title [ , $options [ , $disabledTitle [ , $disabledOptions ] ] ] ] ) | |
|---|---|
| 前のページにリンク | |
| 引数 | 解説 |
| $title | リンクに表示する文字 |
| $options | 要素はurl,step,escape,model,tag,model,update ただしtagはバグで?効かない |
| $disabledTitle | 前のページが存在しない場合に表示する文字列 |
| $disabledOptions | 前のページが存在しない場合に適用するオプション 要素は$optionsと同じ。 こちらはtag有効。 |
| next ( [ $title [ , $options [ , $disabledTitle [ , $disabledOptions ] ] ] ] ) | |
|---|---|
| 次のページにリンク | |
| 引数 | 解説 |
| $title | リンクに表示する文字 |
| $options | 要素はurl,step,escape,model,tag,model,update ただしtagはバグで?効かない |
| $disabledTitle | 次のページが存在しない場合に表示する文字列 |
| $disabledOptions | 次のページが存在しない場合に適用するオプション 要素は$optionsと同じ。 こちらはtag有効。 |
| numbers ( [ $options ] ) | |
|---|---|
| 前後数ページへのリンクを表示 | |
| 引数 | 解説 |
| $options | 要素はtag,before,after,first,last,separator,model,modulus,url,update またはtrue(before,after,first,lastを指定したことになる) |
| sort ( $title [ , $key [ , $options ] ] ) | |
|---|---|
| ソート | |
| 引数 | 解説 |
| $title | リンクに表示する文字列。 ただし$keyが無い場合、$titleが$keyに入れられ、$titleはキャメルケースされて表示される。 |
| $key | ソートするカラム名。 |
| $options | 要素はurl,model,update |
| url ( [ $options [ , $asArray [ , [ $model ] ] ] ) | |
|---|---|
| 指定されたURLを返す | |
| 引数 | 解説 |
| $options | 要素はpage,sort,direction,order。 デフォルトは現在のURL。 |
| $asArray | 返り値を配列として返すか否かのフラグ。 falseの場合、そのまま完全なURLが返ってくる。 trueの場合、link()の第二引数として使用する配列形式で返す。 |
| $model | 別のモデルを使用する場合に指定。 |
| link ( $title [ , $url [ , $options ] ] ) | |
|---|---|
| 任意のリンクを作成して返す | |
| 引数 | 解説 |
| $title | リンクに表示する文字列。 |
| $url | URLに出力するキーと値の配列。 現在のURLの値とマージされる。 |
| $options | 要素はmodel,url,update |
| 使用例 | $paginator->link('リンク',array('a'=>'b')); → 現在のアドレスに/a:b/がプラスされたURLへのリンクが作成される。 |
| currrent ( [ $model ] ) | |
|---|---|
| 現在のページ数を返す | |
| 引数 | 解説 |
| $model | デフォルト以外のモデルをチェックしたい場合に指定。 |
| params ( [ $model ] ) | |
|---|---|
| ページャーの関連パラメータを取得 | |
| 引数 | 解説 |
| $model | デフォルト以外のモデルをチェックしたい場合に指定。 |
| options ( [ $options ] ) | |
|---|---|
| ページャーの関連パラメータを設定 | |
| 引数 | 解説 |
| $options | params()で参照できる情報を上書きできる。 モデル名から含めた配列で指定が必要。 ビューからでは指定できない内容が多い。 |
| 使用例 | $paginator->options(array('Hoge'=>array('page'=>10))) → 現在のページを10ページということにする |
| counter ( [ $options ] ) | |
|---|---|
| 現在の件数やページ数などを返す | |
| 引数 | 解説 |
| $options | 要素はmodel,format,separator ただし引数を文字列で与えた場合、$options['format']として扱われる。 |
| $options['format'] | $options['format']は特殊なので此処で解説。 無指定、'pages'の場合、「3 of 50」(50ページ中3ページ目の意味) 'range'の場合、「41 - 60 of 999」(999件中41-60件目の意味) それ以外の場合、入力した中から以下の文字列が置換されて返ってきます。 %page%→現在のページ数 %pages%→全ページ数 %current%→1ページあたりの件数 %count%→全件数 %start%→現在のページの開始件数 %end%→現在のページの終了件数 |
| 使用例 | $paginator->counter(array('format'=>'range')) → 「41 - 60 of 999」 $paginator->counter('全%pages%ページ中%page%ページ目を表示') → 「全50ページ中10ページ目を表示」 |
| hasPage ( $model , [ $page ] ) | |
|---|---|
| 該当のページが存在するかチェック | |
| 引数 | 解説 |
| $model | ページが存在するかチェックしたいモデル名。 ただし数値を入れた場合、ここが第二引数の$page扱いになる。 |
| $page | チェックしたいページ数。 |
| 使用例 | $paginator->hasPage('Hoge',10) → Hogeモデルのページャに10ページ目が存在するかチェック $paginator->hasPage(10) → 現在のモデルのページャに10ページ目が存在するかチェック |
| hasPrev ( [ $model ] ) | |
|---|---|
| 前のページが存在するかチェック | |
| 引数 | 解説 |
| $model | チェックしたいモデル名。 デフォルトは現在のモデル。 |
| hasNext ( [ $model ] ) | |
|---|---|
| 次のページが存在するかチェック | |
| 引数 | 解説 |
| $model | チェックしたいモデル名。 デフォルトは現在のモデル。 |
| defaultModel ( ) | |
|---|---|
| デフォルトのモデル名を取得 | |
| 引数 | 解説 |
| なし | 基本的に内部用 |
| sortKey ( [ $model [ , $options ] ] ) | |
|---|---|
| ソートのORDER BYの値を取得。passedArgs['sort']に近い | |
| 引数 | 解説 |
| $model | デフォルト以外のモデルを使用する場合に指定。 |
| $options | sort,order,defaults |
| sortDir ( [ $model [ , $options ] ] ) | |
|---|---|
| ソートの順番(ASC,DESC)を取得。passedArgs['direction']に近い | |
| 引数 | 解説 |
| $model | デフォルト以外のモデルを使用する場合に指定。 |
| $options | order,defaults,direction |
| 要素 | 解説 |
|---|---|
| tag | ページャーは通常<span>で括られるが、それを変更する。 |
| separator | リンクが複数出力される場合、間を分けるセパレータ。 |
| before | リンクの前に入れる文字列。 |
| after | リンクの後ろに入れる文字列。 |
| first | 先頭へのリンクを表す文字列。 数値を入れた場合、一件目から該当件数を表示する。 |
| last | 最後へのリンクを表す文字列。 数値を入れた場合、後ろから該当件数を表示する。 |
| model | デフォルトのモデルではなく、別のモデルのページャを使用したい場合にモデル名を入れる。 |
| modulus | 前後を合わせて何ページ表示するか。 前3ページ、後6ページといった指定は出来ない。 |
| url | 配列で指定。 リンクのアドレスに指定した値が追加されます。 |
| step | 前後step数先のページへのリンクを作成する。 |
| update | デフォルトは'Html'で、取れる値は'Html'か'Ajax'。 どちらの形式のリンクを作成するか。 |
| sort,order,defaults,direction | ? '/(?:\w+\.)?(\w+)/'って何だ? |
で、見ていて色々とバグっぽい挙動を見つけました。
$paginator->first(5)みたいに数値を渡すと、2~5では与えた文字に1ページ目へのリンクとなり、6以降を渡すと$options['first']=5を渡したのと同じ挙動になります。
$options['params']を$paginator->numbers()に渡すとページャが死んじゃいますし、$options['options']を$paginator->first()や$paginator->last()に渡すとやっぱり死にます。
一部のメソッド内で$optionsをectract()してるので、おかしくなるのは大抵そのせいです。
このectract()って全く意味がない使い方に見えるんだが、何故こんなことしているのだろう?
あと基本的に括りは<span>ですが、何故かfirst()とlast()だけ<div>なのは何故。
つうか、そもそも$paginatorって使いにくいよね。
未だPEAR::Pagerに勝るものはないと思う。
CakePHPの記事一覧
PR
トラックバック
トラックバックURL:
コメント
サイコー!
大変助かりましたm(_ _)m
posted by gogog at
2012/12/04
01:13
[ コメントを修正する ]