CakePHP1.2には標準でページャが付属しています。
前作ったcake_samplesテーブルでページャを実現してみます。
とりあえず適当にサンプル投入。
cake.php
1
2
3
4
5
6
7
|
$pdo=new PDO('mysql:dbname=cakephp;host=localhost','cakephp','cake');
for($loop=1;$loop<1000;$loop++){
$sql="INSERT INTO cake_samples (title,body,created) VALUES
('タイトル:".md5($loop)."','ボディ:".(int)($loop/50)."',NOW())";
$pdo->exec($sql);
}
|
中身は全く意味はないです。
コントローラを作成。
app/controllers/cake_sample_controller.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/*
CakeSampleコントローラ
*/
class CakeSampleController extends AppController{
//自分の名前
var $name = 'CakeSample';
//CakeSample/form
public function form() {
//入れる
$this->set('cake_sample', $this->paginate('CakeSample'));
}
}
|
コントローラ側の使い方はfind()と概ね同じですが、呼び方は
$this->CakeSample->paginate()
ではなく
$this->paginate('CakeSample')
となります。
$paginateは引数が無かった場合の初期値となります。
ビューは$paginatorを適当に呼び出すだけ。
ページャーのリンクは$paginateから呼び出しますが、実際のデータ自体はコントローラでsetした値から取得することになります。
app/views/cake_sample/search.ctp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
$options=array();
$options['modulus']='10';
$options['update']='Ajax';
$paginator->options($options);
//最初、最後へ
print($paginator->first('最初へ'));
print($paginator->last('最後へ',$options));
//前後へのリンク
print($paginator->prev('前へ',$options,'前はない',$options));
print($paginator->next('次へ',$options,'次はない',$options));
//前後数ページを表示
print($paginator->numbers($options));
//件数取得
print($paginator->counter('
合計 %pages% ページ中の %page% ページ目です。
総レコード %count% のうち、 %start% 行目から %end% 行目までの
%current% 行を表示しています')
);
//チェック
//現在のページ数
$paginator->current();
//10ページ目が存在するか
$paginator->hasPage(10);
//CakeSampleモデルの10ページ目が存在するか
$paginator->hasPage('CakeSample',10);
//前後のページが存在するか
$paginator->hasNext();
$paginator->hasPrev();
//現在のソート状態
$paginator->sortKey(null,$options);
$paginator->sortDir();
//ページャに関する情報を取得
$paginator->params();
//ソートする基準を選択
print($paginator->sort('ID順','id',$options));
print($paginator->sort('CakeSample.title'));
//データ取得
var_dump($cake_sample);
|
大文字だったり小文字だったり_だったりキャメルだったりうっとおしいことこの上ありません。
アクセスすると「前へ」「次へ」「ID順」等のリンクが現れ、クリックするだけで自動的に遷移します。
動作原理が全く分からないので非常に気持ち悪いですが、とりあえずページャが動きました。
では複数のページャーはどうすればいいかとか、検索結果に対してのページャはどうすればいいかとかはわからないままです。
CakePHPの記事一覧
PR
トラックバック
トラックバックURL: