CakePHP1.3で作る会員管理システム(22) 会員一覧と会員検索
会員一覧と会員検索
会員管理を作ります。
最初に、いまのままだと見づらいので、一覧(indexアクション)の整形をしておきます。
admin_index.ctp を開いて、不要な列を削除します。
今は、
<table cellpadding="0" cellspacing="0"> <tr> <th><?php echo $this->Paginator->sort('id');?></th> <th><?php echo $this->Paginator->sort('email');?></th> <th><?php echo $this->Paginator->sort('password');?></th> <th><?php echo $this->Paginator->sort('type_id');?></th> <th><?php echo $this->Paginator->sort('birthday');?></th> <th><?php echo $this->Paginator->sort('img1');?></th> <th><?php echo $this->Paginator->sort('img2');?></th> <th><?php echo $this->Paginator->sort('created');?></th> <th><?php echo $this->Paginator->sort('modified');?></th> <th class="actions"><?php __('Actions');?></th> </tr>
こうなっていますが、password img1 img2 modified あたりはなくてもよいと思います。
(クライアント次第ですが)
対応する td の方も削除しておきます。
と、一見して、登録日(created)がDBの日付データそのままで出力されていて見づらいです。
ということで、 members_controller.php の helper にさらに ‘Time’ を追加します。
class MembersController extends AppController { var $name = 'Members'; var $helpers = array('Javascript', 'Time');
で、ビューに戻り、誕生日と登録日は、
こうなっているのを
<td><?php echo $member['Member']['birthday']; ?> </td> <td><?php echo $member['Member']['created']; ?> </td>
こうします。
<td><?php echo $this->Time->format($format='Y/m/d', $member['Member']['birthday']); ?> </td> <td><?php echo $this->Time->format($format='Y/m/d', $member['Member']['created']); ?> </td>
ついでに、
<div class="actions"> ... </div>
の中のアクションリストは不要なので丸ごと削除しておきます。
最後に paginate の設定を入れておきます。
members_controller.php の上の方に、
var $paginate = array( 'limit' => 15, 'order' => array( 'Member.id' => 'desc' ), );
を入れます。15件で改ページ、デフォルトの並び順を会員のID降順にします。
引き続き、会員検索のページの準備をします。
一覧の admin_index.ctp にそのまま検索フォームをつけてしまうというのもありかとは思いますが、とりあえず今回は別ビュー、別アクションにします。
admin_index.ctp を別の名前で保存で admin_serch.ctp を作ります。
で、フォーム開始を
<?php echo $this->Form->create(array("action" => "search", "type" => "post")); ?>
として、
<table> <tr> <th>入会日</th> <td> <?php echo $this->Form->year("from", '2011','2012'); ?>年 <?php echo $this->Form->month("from",null,array('monthNames'=>false)); ?>月 <?php echo $this->Form->day("from",null); ?>日 ~ <?php echo $this->Form->year("to", '2011','2012'); ?>年 <?php echo $this->Form->month("to",null,array('monthNames'=>false)); ?>月 <?php echo $this->Form->day("to",null); ?>日 </td> </tr> <tr> <th>メールアドレス</th> <td> <?php echo $this->Form->text("email"); ?> </td> </tr> <tr> <th>種別</th> <td> <?php echo $this->Form->select("type_id", $types); ?> </td> </tr> <tr> <th>好きな物</th> <td> <?php echo $this->Form->input('favorites', array('multiple'=>'checkbox', 'label' => false)); ?> </td> </tr> </table> <?php echo $this->Form->end(' 検索 '); ?>
このような検索フォーム部分を追加します。
さらにその下に
<?php $this->Paginator->options(array('url' => $searchword )); ?>
peginator のオプションを入れておきます。
これは peginator に検索キーワードを渡すためのものです。
とりあえず、members_controller.php に以下のアクションと追加しておきます。
function admin_search() { $this->Member->recursive = 0; $this->set('members', $this->paginate()); $types = $this->Member->Type->find('list'); $favorites = $this->Member->Favorite->find('list'); $this->set(compact('types', 'favorites')); }