ユーザの一覧表示、新規作成(追加)、編集、最後に削除です。
苦手なjavascriptで手間取って時間かかりました( ̄Д ̄;;
苦手なjavascriptで手間取って時間かかりました( ̄Д ̄;;
■ File Tree
■ コントローラ:User
admin/application/controllers/user.php
<?php class User extends Controller { function __construct() { parent::__construct(); if( ! _s('admin')) redirect(); $this->load->model('users_model', 'usersdb'); } function index() { $this->accounts(); } function accounts($page=0) { $this->form_validation->set_rules('delete', '', 'isArray'); if($this->form_validation->run()) { $this->usersdb->delete_array($this->input->post('delete')); } $data['breadcrumbs'] = array(_l('HOME')=>'', _l('USERLIST')=>'user'); $data['h1'] = _l('USERLIST'); $data['all'] = $this->usersdb->all($page); $this->layout->view('user/accounts', $data); } function create() { $this->form_validation->set_error_delimiters('<span class="error">', '</span>'); $this->form_validation->set_rules('email',_l('EMAIL'),'required|valid_email|email_exist'); $this->form_validation->set_rules('firstname',_l('FIRSTNAME'),'required|min_length[2]'); $this->form_validation->set_rules('lastname',_l('LASTNAME'),'required|min_length[2]'); $this->form_validation->set_rules('passwd',_l('PASSWORD'),'required|min_length[6]|matches[passwdconf]'); if($this->form_validation->run()) { // insert into db $data = array( 'email' => $this->input->post('email'), 'password' => $this->input->post('passwd'), 'firstname' => $this->input->post('firstname'), 'lastname' => $this->input->post('lastname'), 'status' => $this->input->post('status') ); $this->usersdb->newuser($data); redirect('user'); } $data['breadcrumbs'] = array(_l('HOME')=>'', _l('USERLIST')=>'user', _l('CREATE_USER')=>'user/create'); $data['h1'] = _l('CREATE_USER'); $this->layout->view('user/create', $data); } function edit($id) { // just in case if($user = $this->usersdb->byId($id)) { $this->form_validation->set_error_delimiters('<span class="error">', '</span>'); $this->form_validation->set_rules('email',_l('EMAIL'),'required|valid_email|email_exist['.$id.']'); $this->form_validation->set_rules('firstname',_l('FIRSTNAME'),'required|min_length[2]'); $this->form_validation->set_rules('lastname',_l('LASTNAME'),'required|min_length[2]'); if($this->input->post('passwd')) $this->form_validation->set_rules('passwd',_l('PASSWORD'),'required|min_length[6]|matches[passwdconf]'); if($this->form_validation->run()) { // update user info $data['email'] = $this->input->post('email'); $data['firstname'] = $this->input->post('firstname'); $data['lastname'] = $this->input->post('lastname'); $data['status'] = $this->input->post('status'); if($this->input->post('passwd')) $data['password'] = $this->input->post('password'); $this->usersdb->update($user, $data); redirect('user'); } $data['breadcrumbs'] = array(_l('HOME')=>'', _l('USERLIST')=>'user', _l('EDIT_USER')=>'user/edit'); $data['h1'] = _l('EDIT_USER'); $data['user'] = $user; $this->layout->view('user/edit', $data); } else redirect(); } }
□ メソッド
index ( accounts )で一覧表示と削除。
create で新規ユーザ作成
edit で編集しています。
■ モデル:Users_model.php
extension/models/users_model.php
function newuser($data) { $data['hash'] = $this->auth->_generate_hash(); $data['password'] = $this->auth->_encode($data['password'], $data['hash']); $this->db->insert($this->table, $data); setMessage('success', _l('SUCCESS_CREATE_USER')); } function update($obj, $data) { if(array_key_exists('password', $data)) $data['password'] = $this->auth->_encode($data['password'], $obj->hash); $this->db->where('id', $obj->id); $this->db->update($this->table, $data); setMessage('success', _l('SUCCESS_UPDATE_USER')); }ユーザ追加用とアップデート用のメソッドを追加。
■ Form_validationライブラリにルール追加
extension/libraries/MY_Form_validation.php
<?php class MY_Form_validation extends Form_validation { function __construct() { parent::__construct(); } function email_exist($email, $id=FALSE) { $this->CI->form_validation->set_message('email_exist', $this->CI->lang->line('in_use')); $this->CI->load->model('users_model', 'usersdb'); return ($this->CI->usersdb->exist($email, $id)) ? FALSE : TRUE; } function isArray($arr) { $this->CI->form_validation->set_message('isArray', $this->CI->lang->line('is_array')); return (is_array($arr) && count($arr) > 0) ? TRUE : FALSE; } }
■ ビュー:一覧表示&削除
admin/application/views/user/accounts.php
<div class="buttons"> <button onclick="javascript:location.href = '<?php echo base_url('user/create'); ?>';"><?php echo _l('CREATE_USER'); ?></button> <button onclick="confirmDelSelected();"><?php echo _l('DELETE_SELECTED'); ?></button> </div> <?php echo form_open(uri_string()); ?> <?php if($all): ?> <table class="list"> <tr> <th><input type="checkbox" onclick="applyToAll(this);" /></th> <th><?php echo _l('FULLNAME'); ?></th> <th><?php echo _l('EMAIL'); ?></th> <?php /* <th><?php echo _l('ROLE'); ?></th> */ ?> <th><?php echo _l('STATUS'); ?></th> <th><?php echo _l('ACTION'); ?></th> </tr> <?php foreach($all as $a): ?> <tr> <td><input type="checkbox" name="delete[]" value="<?php echo $a->id; ?>"<?php if($a->id==1): ?> disabled="disabled"<?php endif; ?>></td> <td><?php echo $a->firstname.' '.$a->lastname; ?></td> <td><?php echo $a->email; ?></td> <?php /* <td><?php echo $a->role; ?></td> */ ?> <td><?php echo ($a->status) ? _l('ACTIVE') : _l('INACTIVE') ; ?></td> <td> <a href="<?php echo base_url('user/edit/'.$a->id); ?>"><?php echo _l('EDIT'); ?></a> </td> </tr> <?php endforeach; ?> </table> <?php endif; ?> <?php echo form_close(); ?> <script type="text/javascript"> function confirmDelSelected() { var c = 0; $(":checkbox").each(function(){ if($(this).attr('checked')) c++; }) if(c > 0) { if(confirm("<?php echo _l('CONFIRM_DELETE_SELECTED'); ?>")) $('form').submit(); } else { alert("<?php echo _l('ALERT_PLZ_SELECT'); ?>"); } } </script>
全くスタイルしてない画面ですが(苦)
後でユーザレベル(タイプ)なんかを付け加えることになるでしょう。
削除する時には確認用のポップアップが表示されます。
■ ビュー:新規作成
admin/application/views/user/create.php
<?php echo form_open(uri_string()); ?> <input type="button" value="<?php echo _l('CANCEL'); ?>" onclick="javascript:location.href = '<?php echo base_url('user'); ?>';" tabindex="9" /> <h2><?php echo _l('USER_DETAILS'); ?></h2> <dl class="horizontal"> <dt><?php echo _l('EMAIL'); ?></dt> <dd><input class="field" id="email" type="email" name="email" value="<?php echo set_value('email'); ?>" tabindex="1" /><?php echo form_error('email'); ?></dd> <dt><?php echo _l('LASTNAME'); ?></dt> <dd><input class="field" id="lastname" type="text" name="lastname" value="<?php echo set_value('lastname'); ?>" tabindex="2" /><?php echo form_error('lastname'); ?></dd> <dt><?php echo _l('FIRSTNAME'); ?></dt> <dd><input class="field" id="firstname" type="text" name="firstname" value="<?php echo set_value('firstname'); ?>" tabindex="3" /><?php echo form_error('firstname'); ?></dd> <dt><?php echo _l('PASSWORD'); ?></dt> <dd><input class="field" id="passwd" type="password" name="passwd" value="" tabindex="4" /><?php echo form_error('passwd'); ?></dd> <dt><?php echo _l('PASSWORDCONF'); ?></dt> <dd><input class="field" id="passwdconf" type="password" name="passwdconf" value="" tabindex="5" /></dd> <dt><?php echo _l('STATUS'); ?></dt> <dd> <select name="status" class="field" tabindex="6"> <option value="1"><?php echo _l('ACTIVE'); ?></option> <option value="0"><?php echo _l('INACTIVE'); ?></option> </select> </dd> <dd><input type="submit" value="<?php echo _l('SAVE'); ?>" onclick="return check(['email','lastname','firstname','passwd','passwdconf']);" tabindex="7" /> <input type="reset" value="<?php echo _l('RESET'); ?>" tabindex="8" /></dd> </dl> <?php echo form_close(); ?>
javascriptは非常に簡単なチェックだけですが、javascriptとphpの両方で入力チェックしてます。
入力しないとこんな感じにハイライトされます。
■ ビュー:編集
admin/application/views/user/edit.php
<?php echo form_open(uri_string()); ?> <input type="button" value="<?php echo _l('CANCEL'); ?>" onclick="javascript:location.href = '<?php echo base_url('user'); ?>';" tabindex="9" /> <h2><?php echo _l('USER_DETAILS'); ?></h2> <dl class="horizontal"> <dt><?php echo _l('EMAIL'); ?></dt> <dd><input class="field" id="email" type="email" name="email" value="<?php echo $user->email; ?>" tabindex="1" /><?php echo form_error('email'); ?></dd> <dt><?php echo _l('LASTNAME'); ?></dt> <dd><input class="field" id="lastname" type="text" name="lastname" value="<?php echo $user->lastname; ?>" tabindex="2" /><?php echo form_error('lastname'); ?></dd> <dt><?php echo _l('FIRSTNAME'); ?></dt> <dd><input class="field" id="firstname" type="text" name="firstname" value="<?php echo $user->firstname; ?>" tabindex="3" /><?php echo form_error('firstname'); ?></dd> <dt><?php echo _l('PASSWORD'); ?></dt> <dd><input class="field" id="passwd" type="password" name="passwd" value="" tabindex="4" /><?php echo form_error('passwd'); ?></dd> <dt><?php echo _l('PASSWORDCONF'); ?></dt> <dd><input class="field" id="passwdconf" type="password" name="passwdconf" value="" tabindex="5" /></dd> <dt><?php echo _l('STATUS'); ?></dt> <dd> <select name="status" class="field" tabindex="6"> <option value="1"<?php if($user->status==1): ?> selected="selected"<?php endif; ?>><?php echo _l('ACTIVE'); ?></option> <option value="0"<?php if($user->status==0): ?> selected="selected"<?php endif; ?>><?php echo _l('INACTIVE'); ?></option> </select> </dd> <dd><input type="submit" value="<?php echo _l('SAVE'); ?>" onclick="return check(['email','lastname','firstname']);" tabindex="7" /> <input type="reset" value="<?php echo _l('RESET'); ?>" tabindex="8" /></dd> </dl> <?php echo form_close(); ?>
編集画面も似たようなものです。パスワードが入力されてない場合はスルーします。
パスワードのエラーはphpでのみ表示。javascriptは苦手・・・
だいぶ長くなってしまったので、今日はここまでにします。
0 件のコメント:
コメントを投稿