Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

vagrantその19-47 cakephp入門をやってみる(ページネーションを行う)

参考にさせて頂いたページ

ページネーションを行う(1/5):初心者のためのCakePHP2.0 プログラミング入門

ホストマシン環境

ゲストマシン環境

はじめに

これまでに作成してきたサンプルの、my_sample_dataテーブルを使用して実装してみる。

my_sample_dataテーブルには50件程度のデータを予め用意しました。

MySampleDatasController.phpの編集とその記述内容

参考ページにならって、MySampleDatasController.php$paginateindexアクションを以下のように記述した。

<?php
App::uses('AppController', 'Controller');
class MySampleDatasController extends AppController {
  //pagenaterの設定
  public $paginate = array(
    'page' => 1,//デフォルトでは1ページ目を表示
    'limit' =>5, //5件ずつ表示
    'conditions'=>array(
      "MySampleData.name like 'name%'"//nameフィールドの値がnameで始まるもののみ取得
    )
  );
  //indexアクション
  function index(){
    // レイアウト関係
    $this->layout = "Sample";
    $this->set("header_for_layout","Sample Application");
    $this->set("footer_for_layout","copyright by SYODA-Tuyano. 2011.");
    // 以下がデータベース関係
    //$datas = $this->MySampleData->find('all');
    $this->set('datas',$this->paginate());
  }
}

Virew/MySampleDatas/index.ctpの編集とその記述内容

参考ページにならって以下の通り

<div>
  <?php
    echo $this->Paginator->first('<< ');
    echo $this->Paginator->prev('< ');
    echo $this->Paginator->numbers(
        array(
            'separator' => '/',
            'modulus'=>2,
            'before'=>'|',
            'after'=>'|'
        )
    );
    echo $this->Paginator->next(' >');
    echo $this->Paginator->last(' >>');
  ?>
</div>
<table>
  <tr>
    <th><?php echo $this->Paginator->sort('id');?></th>
    <th><?php echo $this->Paginator->sort('name');?></th>
    <th><?php echo $this->Paginator->sort('mail');?></th>
    <th><?php echo $this->Paginator->sort('tel');?></th>
  </tr>
<?php foreach ($datas as $data): ?>
  <tr>
    <td><?php echo $data['MySampleData']['id']; ?></td>
    <td><?php echo $data['MySampleData']['name']; ?></td>
    <td><?php echo $data['MySampleData']['mail']; ?></td>
    <td><?php echo $data['MySampleData']['tel']; ?></td>
  </tr>
<?php endforeach; ?>
</table>

このソースコードについて

要点としてはMySampleDatasController.phpの中に

  //pagenaterの設定
  public $paginate = array(
    'page' => 1,
    'limit' =>5, 
    'conditions'=>array(
      "MySampleData.name like 'name%'"
    )
  );

    $this->set('datas',$this->paginate());

を書く。

上記した$paginateには以下のようなものが設定できるとのこと。

  • page (初期状態で表示されるページ番号)
  • conditions (データの検索条件)
  • fields (取得するデータの項目名を配列で指定)
  • sort (データのソートの項目名を指定)
  • limit (1ページあたりに表示する項目数)
  • direction (sortで並べかえる方向。ascなら昇順、descなら降順)
  • recursice (再帰的な読み込み深度を指定します。複数モデルが連携されているような場合にどこまでデータを読み取っていくか)

それからViewはさきほどのサンプルコードのように書く。

<?php echo $this->Paginator->sort('id');?>

のようにするとソートしなおす為のa要素を出力できる。

すごい。簡単。

今回はここまで。