CakePHP Paginate Sort の使い方

PHP

Cake PHP Paginate sort について

CakePHP 1.2.3.8166

CakePHPのPagination機能とは、たとえば100件あるようなデータを1ページに100件見せるのではなく、20件ごとぐらいに分割してページにしてくれる便利機能です。

また、項目をソートしてくれる機能もあります。

ここでは、このソート機能  $paginator->sort について書いておきます。

1.そもそもpagination機能を使うために、コントローラーで準備をしておきます。
pagination機能は、取得するデータを指定してそのまま使えます。
モデルのfindと同じように、使えるんですね。
(ついfindしてからpaginationを使うのかと思ってしまいますが、違います。)

 //コントローラー
 function test_view(){
 
 $this->paginate=array(
 
  'モデル名' => array('conditions'=>array(
              'project_id'=>$project_id
                                           ),
                         'order'=>array(
              'PaperFormat.type_number'=>'desc'
 		                       )
                       )					
                     );
 $project_datas=$this->paginate();
 $this->set('ProjectDatas', $project_datas);		
 }

上記はコントローラー内のアクション test_viewで使用する際の書き方です。
$this->paginateはfind(‘all’)と同じ役割をしてくれるので、わざわざ’all’はつける必要はありません。

2.次にビューファイルです。

ビューファイルでpaginagion のソート機能をつけるための編集方法です。
$paginator->sortの引数の設定は次の通りです。

 $paginator->sort(
   '表示したい名称','ソートするキー名称','ページングでも利用する引数'
            )

例は次の通りです。

 <?php echo $paginator->sort('プロジェクト番号','id',array(
                                'url'=>	$this->passedArgs 
                                                        )
 		           );?>

第三の引数

 array( 'url'=>	$this->passedArgs   )

は、今まで保持していた引数を保持するための便利な関数です。
たとえば、URLの

 myapp/projects/test_view/3/62/

の3や62、という値を保持したまま、ソートを行ってくれます。
この例ではキーが’id’になっていますが、他のモデルを利用したい場合、

 'Teacher.id'

みたいに.でつなげて書けばできるようです。

テーブル構造でデータを表示し、テーブルの見出しをソートのキーにしたい時、次のようにします。

 <table>
   <tr>
  	<th><?php echo $paginator->sort('プロジェクト番号','id',array(
                 'url'=>$this->passedArgs 
  )
 );?>
        </th>
 	<th>名称</th>
      </tr>

//データ表示のループ foreach($Projects as $Project){ ?> <tr> <td<?php if ($i % 2 == 0) echo $class;?>> <?php echo $Project['name']; ?> </td> </table>

参考:本家マニュアルサイト(英語)Custom Query Pagination
http://book.cakephp.org/view/249/Custom-Query-Pagination

  • コントローラーのpaginateに渡すパラメータめちゃ助かりました。本に載ってたコントローラ側のpaginateのソートを示すパラメータで”sort”にフィールド渡してもソートされずハマりました。コントローラ側は”order”だったんや!とこのサイト見て解決しました。m(_ _)m — まけどん {2010-09-23 (木) 16:15:30}
カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です