CakePHPで家計簿WEBアプリを作る ブログチュートリアルのおさらい ITかあさん

ITかあさん

CakePHPで家計簿WEBアプリを作る ブログチュートリアルのおさらい

ControllerとViewファイルを一気に作ります。

まだControllerのfunctionの中身もviewの中身も空なので一気に肉付けをしていくことにします。

function index{}の中身

先にphpmyadminからpurchasesテーブルにデータを数件入れて置いてください。何も表示されないのでは分かり難いので。

INSERT INTO  `money`.`purchases` (
`id` ,
`name` ,
`money` ,
`category_id` ,
`created` ,
`modified`
)
VALUES (
NULL ,  'お菓子',  '120', NULL ,  '2012-08-03 14:07:00',  '2012-08-03 14:07:00'
);

私はさっきコンビニで購入した120円のチョコレートを登録しておきました!

purchases_controller.phpのfunction index

Purchaseモデル(purchasesテーブル)の中身を全て引っ張るには、このようにfind(‘all’)すればよいでしょうか?

function index(){
$Purchase_con = array(
  //'conditions' => array(),今回WHEREの条件は無いので、何も書かなくてOK
  'order' => 'Purchase.id ASC'
  );
$Purchase = $this->Purchase->find('all',$Purchase_con);
  }
これでもOKなんですが、
家計簿ということで、データの登録数が何千件にも今後なるかもしれないので
一度に全てのデータを引っ張るfind(‘all’)は適切ではありません。

paginateを使って、データの分割を行う

CakePHPのpaginateを利用すれば、プラグインを使わなくても、誰でも簡単に大量のデータを○○件ずつ分割させることが出来ます。(素敵!)

paginateを利用したデータの取得

//全ての購入品リストを取得
  $this->paginate = array(
  'order' => array('Purchase.id desc'),
  'limit'=>20,//1ページあたりの表示件数
 );
  //view側に購入品リストを渡す
  $this->set('purchases',$this->paginate('Purchase'));//$this->paginate('Model名')

どうでしょう?findと違うのはlimitの意味が、1ページ中に表示されるデータの分割数となるだけですね。

paginateのページ送りをしてくれるHTMLの作成

app/views/elements

elementsディレクトリに、ページ送りするためのpaginator.ctpを作成します。

補足:elementsディレクトリとは?

elementsとは、view上(HTML)のパーツを保存する場所。layoutsフォルダがサイトの大枠のレイアウトを保存するのと違い、
elementsディレクトリにはやれ ヘッダーだの、フッターだの、共通化させたいHTMLを保存するところです。
プログラマーよりWEBデザイナーやコーダーさんがお世話になるフォルダですね

elements/paginator.ctp

paginator.ctpの中身です。私はかれこれ1年くらいこのソースコードを使いまわししているのですが・・
$paginator->numbers()の部分は件数などの表記が出来ます。

<div id='pagination'>
<?php echo $paginator->prev('<< '.__('戻る', true),
array(),
null,
array('class'=>'disabled', 'tag' => 'span',)
); ?>
|
<?php echo $paginator->numbers().
' | '.
$paginator->next(__('次', true).' >>', array(), null, array('tag' => 'span', 'class' => ''));
?>
</div>

views/purchases/index.ctp


<?php echo $this->element('paginator');?><?php echo $paginator->counter(array(
  'format' => '%start% ~ %end%件(全%count%件)'));
  ?>

<table width="100%" cellspacing="0" cellpadding="0" border="0">
  <tr>
  <td>id</td>
  <td>カテゴリー</td>
  <td>購入品</td>
  <td>金額</td>
  <td>日時</td>
  <td>編集</td>
  </tr>
  <?php foreach ($purchases as $purchase): ?>
  <tr>
  <td><?php echo $purchase['Purchase']['id'];?></td>
  <td></td>
  <td><?php echo $purchase['Purchase']['name'];?></td>
  <td><?php echo $purchase['Purchase']['money'];?></td>
  <td><?php echo $purchase['Purchase']['created'];?></td>
  <td><a href="/purchases/edit/<?php echo $purchase['Purchase']['id'];?>">編集</a>|<a href="/purchases/delete/<?php echo $purchase['Purchase']['id'];?>" onclick="return confirm('削除してもよろしいですか?')";>削除</a></td>
  </tr>
  <?php endforeach; ?>
  </table>

ブログチュートリアルの一覧ページを作成する内容とそれほど変わりませんね。ページングもたったこれだけで完了です。
全体の件数も、今何ページ目なのかも表示され、とても優れたページングですね。
私はCakePHPの中でもこの優れたページングがお気に入りです!
このページングのあたりのことはコピペで使って下さい。


初夏のJavaScript祭 in サーキュレーションビル ForPro

ページ: 1 2 3 4 5 6 7 8 9