ecmall一个典型的操作
获取用户数据、
$user = $this->visitor->get(); $user_mod =& m('member'); $user = $user_mod->get_info($user['user_id']); $user['portrait'] = portrait($user['user_id'], $info['portrait'], 'middle'); $user['last_login'] = date('Y 年 m 月 d 日 H:m:s',$user['last_login']);
分析地址编辑控制器的添加、修改、删除
function index() { /* 取得列表数据 */ $model_address =& m('address'); $addresses = $model_address->find(array( 'conditions' => 'user_id = ' . $this->visitor->get('user_id'), )); $this->assign('addresses', $addresses); /* 当前位置 */ $this->_curlocal(LANG::get('member_center'), 'index.php?app=member', LANG::get('my_address'), 'index.php?app=my_address', LANG::get('address_list')); /* 当前用户中心菜单 */ $this->_curitem('my_address'); /** * 获取用户数据 */ $user = $this->visitor->get(); $user_mod =& m('member'); $user = $user_mod->get_info($user['user_id']); $user['portrait'] = portrait($user['user_id'], $info['portrait'], 'middle'); $user['last_login'] = date('Y 年 m 月 d 日 H:m:s',$user['last_login']); $this->assign("user",$user); /* 当前所处子菜单 */ $this->_curmenu('address_list'); //导入脚本 $this->import_resource(array( 'script' => array( array( 'path' => 'dialog/dialog.js', 'attr' => 'id="dialog_js"', ), array( 'path' => 'jquery.ui/jquery.ui.js', 'attr' => '', ), array( 'path' => 'jquery.plugins/jquery.validate.js', 'attr' => '', ), array( 'path' => 'mlselection.js', 'attr' => '', ), ), 'style' => 'jquery.ui/themes/ui-lightness/jquery.ui.css', )); $this->_config_seo('title', Lang::get('member_center') . ' - ' . Lang::get('my_address')); $this->display('my_address.index.html');
这是一个典型的显示页面
if (!IS_POST) { /* 当前位置 */ /*$this->_curlocal(LANG::get('member_center'), 'index.php?app=member', LANG::get('my_address'), 'index.php?app=my_address', LANG::get('add_address'));*/ //$this->import_resource('mlselection.js, jquery.plugins/jquery.validate.js'); $this->assign('act', 'add'); $this->_get_regions(); header('Content-Type:text/html;charset=' . CHARSET); $this->display('my_address.form.html'); } else { /* 电话和手机至少填一项 */ if (!$_POST['phone_tel'] && !$_POST['phone_mob']) { $this->pop_warning('phone_required'); return; } $region_name = $_POST['region_name']; $data = array( 'user_id' => $this->visitor->get('user_id'), 'consignee' => $_POST['consignee'], 'region_id' => $_POST['region_id'], 'region_name' => $_POST['region_name'], 'address' => $_POST['address'], 'zipcode' => $_POST['zipcode'], 'phone_tel' => $_POST['phone_tel'], 'phone_mob' => $_POST['phone_mob'], ); $model_address =& m('address'); if (!($address_id = $model_address->add($data))) { $this->pop_warning($model_address->get_error()); return; } $this->pop_warning('ok', APP.'_'.ACT); }
添加的基本思路
1、表单最好和数据库的字段对应起来,如果没有提交表单则显示页面
2、前端验证使用jquery validate插件验证
3、模型验证
4、如果有错误,报告错误
5、插入数据库
/* 表单自动验证 */ var $_autov = array( 'user_id' => array( 'required' => true, ), 'consignee' => array( 'required' => true, 'filter' => 'trim', ), 'address' => array( 'required' => true, 'filter' => 'trim', ), 'region_id' => array( 'required' => true, 'filter' => 'intval', ), 'region_name' => array( 'required' => true, 'filter' => 'trim', ), 'phone_tel' => array( 'reg' => '/^[0-9\+(\s]{3,}[0-9\-)\s]{2,}[0-9]$/', //电话号码至少6位 ), 'phone_mob' => array( 'reg' => '/\d{6}/', //至少6位的数字 ), );
以上就是自动验证机制
$('#address_form').validate({ /*errorPlacement: function(error, element){ var _message_box = $(element).parent().find('.field_message'); _message_box.find('.field_notice').hide(); _message_box.append(error); }, success : function(label){ label.addClass('validate_right').text('OK!'); },*/ errorLabelContainer: $('#warning'), invalidHandler: function(form, validator) { var errors = validator.numberOfInvalids(); if(errors) { $('#warning').show(); } else { $('#warning').hide(); } }, onkeyup : false, rules : { consignee : { required : true }, region_id : { required : true, min : 1 }, address : { required : true }, phone_tel : { required : check_phone, minlength:6, checkTel:true }, phone_mob : { required : check_phone, minlength:6, digits : true } }, messages : { consignee : { required : '{$lang.consignee_required}. ' }, region_id : { required : '{$lang.region_required}. ', min : '{$lang.region_required}. ' }, address : { required : '{$lang.address_required}. ' }, phone_tel : { required : '{$lang.phone_required}. ', minlength: '{$lang.phone_tel_error}. ', checkTel: '{$lang.phone_tel_error}. ' }, phone_mob : { required : '{$lang.phone_required}. ', minlength: '{$lang.phone_mob_error}. ', digits : '{$lang.phone_mob_error}. ' } }, groups:{ phone:'phone_tel phone_mob' } }); });
以上就是表单验证的例子
function edit() { $addr_id = empty($_GET['addr_id']) ? 0 : intval($_GET['addr_id']); if (!$addr_id) { echo Lang::get("no_such_address"); return; } if (!IS_POST) { $model_address =& m('address'); $find_data = $model_address->find("addr_id = {$addr_id} AND user_id=" . $this->visitor->get('user_id')); if (empty($find_data)) { echo Lang::get('no_such_address'); return; } $address = current($find_data); /* 当前位置 */ $this->_curlocal(LANG::get('member_center'), 'index.php?app=member', LANG::get('my_address'), 'index.php?app=my_address', LANG::get('edit_address')); /* 当前用户中心菜单 */ /*$this->_curitem('my_address'); /* 当前所处子菜单 */ header('Content-Type:text/html;charset=' . CHARSET); $this->_curmenu('edit_address'); $this->assign('address', $address); //$this->import_resource('mlselection.js, jquery.plugins/jquery.validate.js'); $this->assign('act', 'edit'); $this->_get_regions(); $this->display('my_address.form.html'); } else { /* 电话和手机至少填一项 */ if (!$_POST['phone_tel'] && !$_POST['phone_mob']) { $this->pop_warning('phone_required'); return; } $data = array( 'consignee' => $_POST['consignee'], 'region_id' => $_POST['region_id'], 'region_name' => $_POST['region_name'], 'address' => $_POST['address'], 'zipcode' => $_POST['zipcode'], 'phone_tel' => $_POST['phone_tel'], 'phone_mob' => $_POST['phone_mob'], ); $model_address =& m('address'); $model_address->edit("addr_id = {$addr_id} AND user_id=" . $this->visitor->get('user_id'), $data); if ($model_address->has_error()) { $this->pop_warning($model_address->get_error()); return; } $this->pop_warning('ok', APP.'_'.ACT); } }
以上就是编辑操作的例子
编辑操作的算法
1、使用传过来的id查询数据
2、把数据填入表单
3、数据验证
4、保存
function drop() { $addr_id = isset($_GET['addr_id']) ? trim($_GET['addr_id']) : 0; if (!$addr_id) { $this->show_warning('no_such_address'); return; } $ids = explode(',', $addr_id);//获取一个类似array(1, 2, 3)的数组 $model_address =& m('address'); $drop_count = $model_address->drop("user_id = " . $this->visitor->get('user_id') . " AND addr_id " . db_create_in($ids)); if (!$drop_count) { /* 没有可删除的项 */ $this->show_warning('no_such_address'); return; } if ($model_address->has_error()) //出错了 { $this->show_warning($model_address->get_error()); return; } $this->show_message('drop_address_successed'); }
删除一个数据的例子
删除算法
1、获取对应数据,如果没有抛出异常
2、分解删除数组
3、如果不是数组删除,递归操作
4、显示信息