Flexigrid在FleaPHP下的使用方法介绍

目前,网络上能够找得到的、基于jQuery框架的、功能比较强大的grid有两个:jqGrid和Flexigrid。虽然这两个表格插件没有Ext-Grid表格功能那么强大,但基本能满足日常应用。jqGrid的用法石头在《封装了jqGrid为control,大家用用看?》的贴子里已做了具体介绍,在此我不再赘言。Flexigrid的功能比jqGrid稍弱,但胜在界面美观(仿Ext),易于上手。下面我就Flexigrid在FleaPHP下的使用方法进行具体说明。

一、Flexigrid的新特性:

  • 可调整大小的列
  • 可调整大小的高度和宽度
  • 可排序的列标题
  • 酷主题
  • 可将普通表格转换成grid
  • 能够连接到一个AJAX数据源( 支持XML和JSON [新] )
  • 分页
  • 显示/隐藏列
  • 工具栏(新)
  • 搜索(新)
  • 访问API


二、相关代码下载


三、代码安装:

    代码安装比较简单,将代码解压缩到自己项目的相应子目录下即可,我这里是lib/jquery目录。

四、使用方法:

1、为了不将大家弄迷糊,且便于后续介绍,容我先将用到的数据表单视图代码贴出来。

  1. CREATE TABLE IF NOT EXISTS `users` (
  2.   `user_id` int(10) unsigned NOT NULL auto_increment,
  3.   `unit_id` int(10) unsigned NOT NULL default '0',
  4.   `jg_id` int(10) unsigned NOT NULL default '0',
  5.   `username` varchar(8) NOT NULL default '',
  6.   `password` varchar(64) NOT NULL default '',
  7.   `name` varchar(10) NOT NULL default '',
  8.   `class` enum('0','1') NOT NULL default '0',
  9.   `created` datetime NOT NULL default '0000-00-00 00:00:00',
  10.   `updated` datetime NOT NULL default '0000-00-00 00:00:00',
  11.   PRIMARY KEY  (`user_id`)
  12. )
复制代码

说明:数据库与数据表均为 GB2312 编码格式创建。

2、制作模板文件(Smarty)

由于Smarty要将JavaScript代码里的url进行转换,因此我将xhtml模板代码跟JavaScript合并在一起组成一个模板文件。如果你将JavaScript代码里的URL写实,也可以将JavaScript代码写入文件中,然后通过<script type="text/javascript" src="lib/jquery/your_js_file.js"></script>的方式引用。

xhtml代码:

  1. <link rel="stylesheet" type="text/css" href="lib/jquery/ui/css/cupertino/jquery-ui-1.7.1.custom.css">
  2. <link rel="stylesheet" type="text/css" href="lib/jquery/flexigrid/css/flexigrid/flexigrid.css">
  3. <script type="text/javascript" src="lib/jquery/jquery-1.3.2.min.js"></script>
  4. <script type="text/javascript" src="lib/jquery/jquery-ui-1.7.1.custom.min.js"></script>
  5. <script type="text/javascript" src="lib/jquery/jquery.form.js"></script>
  6. <script type="text/javascript" src="lib/jquery/flexigrid/flexigrid.js"></script>
  7. <!-- //jquery.alerts -->
  8. <link rel="stylesheet" type="text/css" href="lib/jquery/alerts/jquery.alerts.css">
  9. <script type="text/javascript" src="lib/jquery/alerts/jquery.alerts.js"></script>
  10. <style>  
  11. .flexigrid div.fbutton .add  
  12. {  
  13.         background: url(lib/jquery/flexigrid/css/images/row_add.gif) no-repeat center left;  
  14. }
  15.    
  16. .flexigrid div.fbutton .edit  
  17. {  
  18.     background: url(lib/jquery/flexigrid/css/images/row_edit.gif) no-repeat center left;  
  19. }
  20. .flexigrid div.fbutton .delete  
  21. {  
  22.     background: url(lib/jquery/flexigrid/css/images/row_delete.gif) no-repeat center left;  
  23. }
  24.         
  25. .flexigrid div.fbutton .reset  
  26. {  
  27.     background: url(images/user_reset.gif) no-repeat center left;  
  28. }
  29. .flexigrid div.fbutton .excel  
  30. {  
  31.     background: url(images/excel.gif) no-repeat center left;  
  32. }
  33. #dialog_div {
  34.         text-align: left;
  35.         padding-left: 20px;
  36.         margin: 0px;
  37.         padding-top: 10px;
  38.         background-color: #E3F0EA;
  39. }
  40. #dialog_form {
  41.         margin: 0px;
  42.         font-family: Verdana, Arial, Helvetica, sans-serif;
  43.         font-size: 12px;
  44.         font-style: normal;
  45. }
  46. #dialog_form input.txt {
  47.         font-family: Arial, Helvetica, sans-serif;
  48.         font-size: 12px;
  49.         font-style: normal;
  50. }
  51. </style>
  52. <!-- // 数据显示表格 -->
  53. <table id="grid"></table>
  54. <!-- // 添加/修改数据对话框 -->
  55. <div id="dialog_div" style='display:none'>
  56.    <form id="dialog_form" name="dialog_form" action="">
  57.      <input name="user_id" type="hidden" id="user_id" value="" />
  58.          <label>用户工号:
  59.      <input name="username" type="text" class="txt" id="username" />
  60.      </label>
  61.      <br /><br />
  62.      <label>真实姓名:
  63.      <input name="name" type="text" class="txt" id="name" />
  64.      </label>
  65.      <br /><br />
  66.          {{if $input.unitView}}
  67.                 <label>所属单位:
  68.                 {{$input.html_unit}}
  69.                 </label>
  70.                 <br /><br />
  71.          {{/if}}
  72.          {{if $input.jgView}}
  73.                 <label>所属机构:
  74.                 {{$input.html_jg}}
  75.                 </label>
  76.                 <br /><br />
  77.          {{/if}}
  78.      <label>分配角色:
  79.      {{$input.html_auth}}
  80.      </label>
  81.    </form>
  82. </div>
复制代码

javaScript代码:

  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3.          $("#grid").flexigrid({
  4.             url: '{{url controller='User' action='GetJsonData'}}',
  5.                 dataType: 'json',
  6.                 colModel:
  7.         [
  8.                         {display: '序号', name : 'seq', width : 40, sortable : false, align: 'center'},
  9.             {display: '#ID', name : 'user_id', width : 40, sortable : true, align: 'left', hide: true},
  10.                         {display: '用户工号', name : 'username', width : 70, sortable : true, align: 'left'},
  11.                         {display: '真实姓名', name : 'name', width : 60, sortable : true, align: 'left'},
  12.             {display: '所属单位', name : 'unitname', width : 100, sortable : false, align: 'left'},
  13.             {display: '所属机构', name : 'jgname', width : 100, sortable : false, align: 'left'},
  14.             {display: '分配角色', name : 'jgname', width : 80, sortable : false, align: 'left'},
  15.                         {display: '创建时间', name : 'created', width : 110, sortable : true, align: 'left'},
  16.             {display: '更新时间', name : 'updated', width : 110, sortable : true, align: 'left'}
  17.                 ],
  18.                 searchitems:
  19.         [
  20.                         {display: '用户工号', name : 'username'},
  21.                         {display: '用户姓名', name : 'name', isdefault: true}
  22.                 ],
  23.                 sortname: "username",
  24.                 sortorder: "asc",
  25.                 usepager: true,
  26.                 title: '用户工号维护',
  27.                 useRp: true,
  28.                 rp: 20,
  29.                 rpOptions:[10,15,20,25,40],
  30.                 showTableToggleBtn: false,
  31.                 width: 590,
  32.                 height: 400,
  33.         striped:true,
  34.                 timeout:1000,
  35.        // onSubmit: addFormData,
  36.         pagestat: '当前显示记录 {from} 到 {to} 条,共 {total} 条记录',
  37.                 procmsg: '正在处理,请稍等 ...',
  38.         nomsg:'找不到符合条件的资料!',
  39.         errormsg:'连接错误!',
  40.         buttons:
  41.         [
  42.             {name: '添加', bclass: 'add', onpress: opt},
  43.             {name: '修改', bclass: 'edit', onpress: opt},
  44.             {name: '删除', bclass: 'delete', onpress: opt},
  45.             {separator: true},
  46.                         {name: '重置密码', bclass: 'reset', onpress: opt},
  47.                         {separator: true},
  48.                         {name: '导出EXCEL', bclass: 'excel', onpress: opt},
  49.                         {separator: true}
  50.         ]
  51.         });
  52.    
  53.         /**
  54.          * 添加/修改对话框
  55.          */
  56.         $('#dialog_div').dialog({  
  57.         hide:'',    //点击取消后隐藏,如果设为true,则无法关闭弹窗。  
  58.         autoOpen:false,
  59.                 width:360,
  60.         height:250,  
  61.         //modal:true, //蒙层  
  62.         //title:'单位资料添加/修改',  
  63.         overlay: {  
  64.             opacity: 0.5,  
  65.             background: "black"  
  66.         },  
  67.         buttons:{  
  68.             '提交':function(){ addUpdate(); },  
  69.             '取消':function(){ $(this).dialog("close"); },  
  70.             '重置':function(){ $(this).children('form')[0].reset(); }  
  71.         }  
  72.     });
  73.     /**
  74.      * 点击工具条按钮操作
  75.      */
  76.     function opt(com, grid) {
  77.         switch (com) {
  78.             case '添加':
  79.                                 $('.ui-dialog-title').text('添加用户工号');
  80.                 $('#dialog_div').dialog('open').children('form')[0].reset();
  81.                 break;
  82.             case '修改':
  83.                                 $('.ui-dialog-title').text('修改用户工号');
  84.                 selected_count = $('.trSelected', grid).length;
  85.                 if (selected_count == 0) {
  86.                     jAlert('请选择一条记录。', '消息提示');
  87.                                         return false;
  88.                 }
  89.                 if(selected_count>1){
  90.                     jAlert('抱歉每次只能修改一条记录。', '消息提示');
  91.                     return false;
  92.                 }  
  93.                 var data = new Array();
  94.                 $('.trSelected td', grid).each(function(i){
  95.                                 //$('.trSelected td:nth-child(2) div', grid).each(function(i){
  96.                     data=$(this).children('div').text();
  97.                                         //data=$(this).text();
  98.                 });
  99.                                 //alert(data[3]);
  100.                 //form = $('#dialog_div').dialog('open').children('form');
  101.                 //form.children('input[name=unit_id]').val(data[1]);
  102.                 //form.children('input[name=code]').val(data[2]);
  103.                 //form.children('input[name=name]').val(data[3]);
  104.                                 $('#user_id')[0].value = data[1];
  105.                                 $('#username')[0].value = data[2];
  106.                                 $('#name')[0].value = data[3];
  107.                                 $.ajax({  
  108.                                         url:'{{url controller='User' action='GetIds'}}',  
  109.                                         data:{user_id:data[1]},  
  110.                                         type:'POST',  
  111.                                         dataType:'json',
  112.                                         success:function(data){
  113.                                                 //alert($('#jg_id').options);
  114.                                                 var unit_slt = $('#unit_id option');
  115.                                                 var jg_slt = $('#jg_id option');
  116.                                                 var unit_len = unit_slt.length;
  117.                                                 var jg_len = jg_slt.length;
  118.                                                 if(unit_len > 0) {
  119.                                                         setSelected(unit_slt, data.unit_id);
  120.                                                 }
  121.                                                 if(jg_len > 0) {
  122.                                                         setSelected(jg_slt, data.jg_id);
  123.                                                 }
  124.                                                 
  125.                                                 var auth_radio = $('input:radio');
  126.                                                 //alert(auth_radio.length);
  127.                                                 if (auth_radio.length > 0) {
  128.                                                         setChecked(auth_radio, data.auth);
  129.                                                 }
  130.                                         }  
  131.                                 });
  132.                 $('#dialog_div').dialog('open');  
  133.                 break;  
  134.             case '删除':
  135.                                 selected_count = $('.trSelected', grid).length;
  136.                 if (selected_count == 0) {
  137.                     jAlert('请选择一条记录。', '消息提示');
  138.                                         return false;
  139.                 }
  140.                                 if(selected_count>1){
  141.                     jAlert('抱歉每次只能删除一条记录。', '消息提示');
  142.                     return false;
  143.                 }
  144.                 var names = '';  
  145.                 $('.trSelected td:nth-child(4) div',grid).each(function(i){  
  146.                     if(i) {
  147.                         names += ',';
  148.                     }
  149.                     names += $(this).text();  
  150.                 });  
  151.                 var ids = '';  
  152.                 $('.trSelected td:nth-child(2) div',grid).each(function(i){  
  153.                     if(i){
  154.                         ids += ',';
  155.                     }
  156.                     ids += $(this).text();  
  157.                 })
  158.                                 /*
  159.                                 if (ids == '') {
  160.                                         alert('请选择删除记录,允许同时选择多条记录。');
  161.                                         return;
  162.                                 }*/
  163.                                 /*
  164.                                 if(confirm("确认删除[" + names + "]的用户工号吗?")){  
  165.                     del(ids);  
  166.                 }*/
  167.                                 jConfirm("确认删除[<font color='#FF0000'>" + names + "</font>]的用户工号吗?", '删除确认', function(btn){
  168.                                         if (btn) { del(ids); }
  169.                                 });
  170.                 break;
  171.                         case '重置密码':
  172.                                 selected_count = $('.trSelected', grid).length;
  173.                 if (selected_count == 0) {
  174.                     jAlert('请选择一条记录。', '消息提示');
  175.                                         return false;
  176.                 }
  177.                                 if(selected_count>1){
  178.                     jAlert('抱歉每次只能选择一条记录。', '消息提示');
  179.                     return false;
  180.                 }
  181.                                 var id = $('.trSelected td:nth-child(2) div',grid).text();
  182.                                 /*
  183.                 var ids = '';  
  184.                 $('.trSelected td:nth-child(2) div',grid).each(function(i){  
  185.                     if(i){
  186.                         ids += ',';
  187.                     }
  188.                     ids += $(this).text();  
  189.                 })*/
  190.                                 reset(id);
  191.                                 break;
  192.                         case '导出EXCEL':
  193.                                 document.location.href = "{{url controller='User' action='Export'}}";
  194.                                 break;
  195.         }  
  196.     }  
  197.    
  198.     /**
  199.      * 添加记录
  200.      */
  201.     function addUpdate(){  
  202.         $('#dialog_form').ajaxSubmit({
  203.                 //$('#dialog_form').ajaxform({
  204.                         url:"{{url controller='User' action='Save'}}",
  205.             type:'POST',  
  206.             dataType:'json',
  207.             resetForm:true,
  208.             success:function(){  
  209.                 $('#grid').flexReload();
  210.                                 $('#dialog_div').dialog('close');
  211.             },
  212.                         error:function(data){
  213.                                 jAlert(data.msg, '消息提示');
  214.                         }
  215.         });      
  216.     };
  217.    
  218.     /**
  219.      * 删除记录
  220.      */
  221.     function del(ids){  
  222.         $.ajax({  
  223.             url:"{{url controller='User' action='Del'}}",  
  224.             data:{ids:ids},  
  225.             type:'POST',  
  226.             dataType:'json',
  227.             success:function(){  
  228.                 $('#grid').flexReload();
  229.             }  
  230.         });
  231.     };
  232.         /**
  233.          * 重置密码
  234.          */
  235.         function reset(id) {
  236.                 $.ajax({  
  237.             url:"{{url controller='User' action='Reset'}}",  
  238.             data:{user_id:id},  
  239.             type:'POST',  
  240.             dataType:'json',
  241.             success:function(data){  
  242.                 //$('#grid').flexReload();
  243.                                 jAlert("成功重置[" + data.name + "]工号的密码为[123456]。", '消息提示');
  244.                 //return;
  245.             },
  246.                         error:function(data){
  247.                                 jAlert("重置[" + data.name + "]工号的密码失败。", '消息提示')
  248.                         }
  249.         });
  250.         };
  251.         
  252.         // 根据所属单位数据设置已选项
  253.         function setSelected(slt, value) {
  254.                 for(var i=0; i<slt.length; i++) {
  255.                         if(slt.value == value) {
  256.                                 slt.selected = true;
  257.                         } else {
  258.                                 slt.selected = false;
  259.                         }
  260.                 }
  261.         };
  262.         
  263.         // 根据所属机构数据设置已选项
  264.         function setChecked(slt, value) {
  265.                 for(var i=0; i<slt.length; i++) {
  266.                         if(slt.value == value) {
  267.                                 slt.checked = true;
  268.                         } else {
  269.                                 slt.checked = false;
  270.                         }
  271.                 }
  272.         };
  273. });
  274. </script>
复制代码

Flexigrid参数配置说明:

  1. // 设置远端服务器URL地址
  2. url: '{{url controller='User' action='GetJsonData'}}',
  3. // 将发送和接收的数据类型设置为JSON格式
  4. dataType: 'json',
  5. // 设置表格表头及数据显示方式
  6. colModel:
  7.         [
  8.                         {display: '序号', name : 'seq', width : 40, sortable : false, align: 'center'},
  9.             {display: '#ID', name : 'user_id', width : 40, sortable : true, align: 'left', hide: true},
  10.                         {display: '用户工号', name : 'username', width : 70, sortable : true, align: 'left'},
  11.                         {display: '真实姓名', name : 'name', width : 60, sortable : true, align: 'left'},
  12.             {display: '所属单位', name : 'unitname', width : 100, sortable : false, align: 'left'},
  13.             {display: '所属机构', name : 'jgname', width : 100, sortable : false, align: 'left'},
  14.             {display: '分配角色', name : 'jgname', width : 80, sortable : false, align: 'left'},
  15.                         {display: '创建时间', name : 'created', width : 110, sortable : true, align: 'left'},
  16.             {display: '更新时间', name : 'updated', width : 110, sortable : true, align: 'left'}
  17.                 ],
  18. // 设置快速搜索参数
  19. searchitems:
  20.         [
  21.                         {display: '用户工号', name : 'username'},
  22.                         {display: '用户姓名', name : 'name', isdefault: true}
  23.                 ],
  24. // 设置表格标题
  25. title: '用户工号维护',
  26. //分页相关参数
  27. usepager: true,        
  28. useRp: true,
  29. rp: 20,
  30. rpOptions:[10,15,20,25,40],
  31. // 不显示关闭表格窗口按钮
  32. showTableToggleBtn: false,
  33. // 设置表格宽度及高度
  34. width: 590,
  35. height: 400,
  36. // 设置表格数据隔行变色
  37. striped:true,
  38. // 设置超时,单位毫秒
  39. timeout:1000,
  40. // 设置表格中文信息显示
  41. pagestat: '当前显示记录 {from} 到 {to} 条,共 {total} 条记录',
  42. procmsg: '正在处理,请稍等 ...',
  43. nomsg:'找不到符合条件的资料!',
  44. errormsg:'连接数据库失败!',
  45. // 设置表格工具按钮
  46. buttons:
  47.         [
  48.             {name: '添加', bclass: 'add', onpress: opt},
  49.             {name: '修改', bclass: 'edit', onpress: opt},
  50.             {name: '删除', bclass: 'delete', onpress: opt},
  51.             {separator: true},
  52.                         {name: '重置密码', bclass: 'reset', onpress: opt},
  53.                         {separator: true},
  54.                         {name: '导出EXCEL', bclass: 'excel', onpress: opt},
  55.                         {separator: true}
  56.         ]
复制代码

四、后台PHP代码(节选):

获取分页数据代码:

  1.         /**
  2.          * 返回JSON分页数据到前台
  3.          *
  4.          */
  5.         function actionGetJsonData()
  6.         {
  7.                 $user = $this->user;
  8.                 $page = ($_POST['page']) ? $_POST['page'] : 1;
  9.                 $limit = ($_POST['rp'])?$_POST['rp'] : 20;
  10.                 $sortname = $_POST['sortname'];
  11.                 $sortorder = $_POST['sortorder'];
  12.                 if (!$sortname) $sortname = 'username';
  13.                 if (!$sortorder) $sortorder = 'asc';
  14.                 $sort = "$sortname $sortorder";
  15.                 if (!$page) $page = 1;
  16.                 if (!$limit) $limit = 15;
  17.                 $offset = ($page-1) * $limit;
  18.                 $query = $_POST['query'];
  19.                 $qtype = $_POST['qtype'];
  20.                 if ($qtype == 'name') {
  21.                         $query = mb_convert_encoding($query, 'GB2312', 'utf-8');
  22.                 }
  23.                 if ($user['RBAC_ROLES'][0] == 'SYSTEM_ADMIN'){
  24.                         $conditions = array(
  25.                                 array('class', '1', '='),
  26.                         );
  27.                 } else {
  28.                         $conditions = array(
  29.                                 array('unit_id', $user['UNITID'], '=', 'AND'),
  30.                                 array('class', '0', '=')
  31.                         );
  32.                 }
  33.                
  34.                 if ($query) {
  35.                         $conditions = array(
  36.                                 array($qtype, '%' . $query . '%', 'LIKE')
  37.                         );
  38.                 }
  39.                
  40.                 $this->_tblUser->enableLinks();
  41.                 $rows = $this->_tblUser->findAll($conditions, $sort, array($limit, $offset));
  42.                 $rs = $this->_tblUser->findAll($conditions);
  43.                 $total = count($rs);
  44.                 $json = "";
  45.                 $json .= "{/n";
  46.                 $json .= "page: $page,/n";
  47.                 $json .= "total: $total,/n";
  48.                 $json .= "rows: [";
  49.                 $rc = false;
  50.                 $i = 1;
  51.                 foreach ($rows as $row) {
  52.                         if ($rc) $json .= ",";
  53.                         $json .= "/n{";
  54.                         $json .= "user_id:'".$row['user_id']."',";
  55.                         $json .= "cell:['".$i."'";
  56.                         $json .= ",'".$row['user_id']."'";
  57.                         $json .= ",'".$row['username']."'";
  58.                         $json .= ",'".addslashes($row['name'])."'";
  59.                         $json .= ",'".addslashes($row['unit']['name'])."'";
  60.                         $json .= ",'".addslashes($row['jgwh']['name'])."'";
  61.                         $json .= ",'".$row['roles'][0]['rolename_cn']."'";
  62.                         $json .= ",'".$row['created']."'";
  63.                         $json .= ",'".$row['updated']."']";
  64.                         $json .= "}";
  65.                         $rc = true;
  66.                         $i++;
  67.                 }
  68.                 $json .= "]/n";
  69.                 $json .= "}";
  70.                 echo $json;
  71.                 exit;
  72.         }
复制代码

注意上面生成 JSON 格式数据的 PHP 代码,必须严格按照这样的格式返回数据,否则 Flexigrid 将无法处理返回的数据。再有,请注意列模型 colModel 里的 name 参数,与 user 数据表的字段并不一一对应,但必须与返回的 JSON 数据保持一致。

保存数据代码:

  1.         /**
  2.          * 保存数据
  3.          *
  4.          */
  5.         function actionSave()
  6.         {
  7.                 $user = $this->user;
  8.                 $data = $_POST;
  9.                 $data['name'] = mb_convert_encoding(trim($data['name']), 'GB2312', 'utf-8');
  10.                 if ($data['username'] == ''){
  11.                         //js_alert("请输入操作帐号。",'',$this->_url());
  12.                         echo "{succees:false,msg:'用户工号不能为空!'}";
  13.                         return;
  14.                 }
  15.                 if (strlen($data['username']) != 8){
  16.                         //js_alert("您输入的工号不等于8位,请检查后重新增加。",'',$this->_url());
  17.                         echo "{succees:false,msg:'用户工号不等于8位!'}";
  18.                         return;
  19.                 }
  20.                 if ($data['name'] == ''){
  21.                         //js_alert("请输入用户名称。",'',$this->_url());
  22.                         echo "{succees:false,msg:'用户姓名不能为空!'}";
  23.                         return;
  24.                 }
  25.                 if ($data['user_id']=='') {
  26.                         $data['password'] = '123456';
  27.                         //$sort = '`user_id` DESC';
  28.                 }
  29.                 if ($data['user_id'] == '' && $this->_tblUser->existsUsername(trim($data['username']))) {
  30.                         //js_alert("该工号已存在,请重新输入。",'',$this->_url());
  31.                         echo "{succees:false,msg:'该用户工号已存在!'}";
  32.                         return false;
  33.                 }
  34.                 if (isset($data['auth']) && ($data['auth'] == 1 || $data['auth'] == 2)) {
  35.                         $data['class'] = '1';
  36.                 }
  37.                 if (isset($data['auth'])) {
  38.                         $data['roles'][0] = $data['auth']; // 为更新 users_roles 中间表准备数据
  39.                 }
  40.                 if ($user['RBAC_ROLES'][0] != 'SYSTEM_ADMIN') {
  41.                         $data['unit_id'] = $user['UNITID'];
  42.                 }
  43.                 $this->_tblUser->enableLink('roles');
  44.                 __TRY();
  45.                 $this->_tblUser->save($data);
  46.                 $ex = __CATCH();
  47.                 if (__IS_EXCEPTION($ex)) {
  48.                         echo "{succees:false,msg:'保存数据失败!'}";
  49.                 } else {
  50.                         echo "{succees:true,msg:'保存数据成功!'}";
  51.                 }
  52.                 exit;
  53.         }
复制代码

注意其中的语句

  1. $data['name'] = mb_convert_encoding(trim($data['name']), 'GB2312', 'utf-8');
复制代码

由于ajax提交的中文数据为 utf-8 编码格式的数据,因此保存到数据表时,须用多字节字符串处理函数 mb_convert_encoding 转换成 GB2312 编码格式的数据。

删除记录代码:

  1. /**
  2.          * 删除记录
  3.          *
  4.          */
  5.         function actionDel()
  6.         {
  7.                 $ids = $_POST['ids'];
  8.                 if ($this->user['RBAC_ROLES'][0] == 'SYSTEM_ADMIN') {
  9.                         __TRY();
  10.                         $this->_tblUser->removeByPkv((int)$ids);
  11.                         $ex = __CATCH();
  12.                 } else {
  13.                         $conditions = array(
  14.                                 array('unit_id', $this->user['UNITID'], '=', 'AND'),
  15.                                 array('user_id', $ids, '='),
  16.                         );
  17.                         $this->_tblUser->enableLink('roles');
  18.                         __TRY();
  19.                         $this->_tblUser->removeByConditions($conditions);
  20.                         $ex = __CATCH();
  21.                 }
  22.                 if (__IS_EXCEPTION($ex)) {
  23.                         echo "{succees:false,msg:'删除数据失败!'}";
  24.                 } else {
  25.                         echo "{succees:true,msg:'删除数据成功!'}";
  26.                 }
  27.                 exit;
  28.         }
复制代码

在此,不使用json_encoding生成返回的分页json格式数据,因为在 GB2312 环境下使用时,返回的中文数据会乱码。估计json_encoding生成了 json 数据对象,而 json 数据对象在 JavaScript 中是以 utf-8 编码来保存数据,所以导致在 GB2312 环境下会产生中文乱码。而上面的 PHP 代码直接返回的数据是 json 格式的字符串,所以在浏览器显示中文数据时不会产生乱码。

五、存在不足:

    Flexigrid存在不足的地方主要有以下几点:

  • 定制搜索功能太弱,但这也是开发者将搜索功能定义为“Quick Search”的原因。
  • 文档严重缺乏,难道外国同行跟我们一样,在利用框架开发程序时,也需要研究框架的源代码?
  • 版本更新维护严重不足,目前最新版本也是2008-7-14推出来的,现在快一年了还没见更新。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值