忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/09/21 01:36 |
CakePHP-06:CakePHPでページャー

CakePHP1.2には標準でページャが付属しています。

前作ったcake_samplesテーブルでページャを実現してみます。
とりあえず適当にサンプル投入。

cake.php 

1
2
3
4
5
6
7
<?php
    $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
<?php
    
    /*
        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
<?php
 
    $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


2009/11/06 22:18 | Comments(0) | TrackBack(2) | PHP

トラックバック

トラックバックURL:
CakePHP1.2.4.8284のページャーの全メソッドと引数を解説。 公式マニュアルには$paginatorの解説が全く載っていません。 マニュアルでは「$paginator->numbersで前後10件ずつ表示したい」「1ページ目にリンクしたい」すら解決できません。 他に解説しているところもほとんど見あたりませんでした。 仕方ないのでソースから解読。 よくわかんないところは想像で適当に補っています。 特に$optionsの中身とかはさっぱりわからないので間違っている可...
弱小PHPerの憂鬱 | 2009/11/25 18:23
現在Programmingカテゴリには有効な求人が32件ありますが、カテゴリページでも先頭10件しか表示されず、続きを見ることができません。 早速ページング処理してみます。 まずapp.ymlに1ページあたりの表示件数を記述。 config/app.yml 1 2 all: max_jobs_on_...
弱小PHPerの憂鬱 | 2010/01/18 22:36

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<買ったものリスト 2009/11/08 | HOME | そしてSteins; Gateは神となった―――ゲームレビュー:シュタインズゲート>>
忍者ブログ[PR]