開発メモ,主に補足by子連れ親父プログラマー

2011-10-28

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'));
    }

このブログを検索

Powered by Blogger.

ラベル

php (17) jQuery (13) OSX (10) MySQL (8) Javascript (7) Postgres (7) port (7) apache (6) Java (3) Smarty (2) html (2) pear (2) FCKEditor (1) XAMPP (1) css (1) git (1) perl (1) ruby (1)

Facebookバナー