easyUI+ThinkPHP使用扩展datagrid-filter简单示例
由于官方默认会将所有字段作为过滤项,并设置为text类型,对此我增加了一个属性用于判断是否默认显示字段过滤项,修改代码共两处如下:
$.extend($.fn.datagrid.defaults, { filterBtnIconCls: "icon-filter", filterMenuIconCls: "icon-ok", remoteFilter: true, filterDefaultText:false,//add by @lhp 2013-11-21 默认不显示过滤项 filterDelay: 500, filterRules: [], filterStringify: function(data){ return JSON.stringify(data); } });
var fopts = getFilter(field); if(!fopts && !opts.filterDefaultText){continue;}//add by @lhp 2013-11-21 判断是否默认是否显示过滤项 var type = fopts ? fopts.type : "text"; var filter = opts.filters[fopts ? fopts.type : "text"]; var input = filter.init(div, fopts ? (fopts.options||{}) : {}); input.addClass("datagrid-filter").attr("name", field); input[0].filter = filter; if (fopts.op){//modify by @lhp 2013-11-21 判断是否有定义规则类,未定义的使用默认过滤 input[0].menu = createFilterButton(div, fopts.op); if (fopts.options && fopts.options.onInit){ fopts.options.onInit.call(input[0]); } } else if (type == "text"){ ....
然后不说了,直接上示例代码如下:
首先模板页代码index.html:
<script lang="javascript"> $(function(){ var dg = $("#__MODULE__DataGrid").datagrid(); dg.datagrid("enableFilter", [{ field:"login_count", type:"numberbox", //options:{precision:0}, op:["equal","notequal","less","greater"] },{ field:"status", type:"combobox", options:{ panelHeight:"auto", data:[{value:"",text:"全部"},{value:"1",text:"正常"},{value:"0",text:"禁用"}], onChange:function(value){ if (value == ""){ dg.datagrid("removeFilterRule", "status"); } else { dg.datagrid("addFilterRule", { field: "status", op: "equal", value: value }); } dg.datagrid("doFilter"); } } }]); }); </script> <div id="__MODULE__PagePanel" class="easyui-layout" data-options="fit : true,border : false"> <!--<div id="__MODULE__SearchTab" title="条件筛选卡" data-options="region:"north",closedTitle:"高级条件筛选卡(点击展开)",border:true,collapsed:true,iconCls:"icon-search"" style="height: 165px;overflow: auto;" align="center"> <form id="__MODULE__SearchForm" onsubmit="$("#__MODULE__Search").click();return false;"> <table class="tableForm"> <tr> <th style="width: 170px;">关键字(支持模糊查询):</th> <td><input name="searchKeyWords" style="width: 315px;" /></td> </tr> </table><br /> <div> <a id="__MODULE__Search" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:"icon-search"" onclick="__MODULE__SearchFun();">过滤条件</a> <a href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:"icon-cross"" onclick="__MODULE__CleanFun();">清空条件</a> </div> </form> </div>--> <div data-options="region:"center",border:false"> <table id="__MODULE__DataGrid" data-options="url : "__URL__/getJsonList", fit : true, border : false,//定义边框 rownumbers:true,//显示行号 pagination : true,//定义分页组件 idField : "id", pageSize :20, pageList : [10,20,50], sortName : "account", sortOrder : "desc", checkOnSelect : true,//选择checkbox则选择行 selectOnCheck : true,//选择行则选择checkbox nowrap : false, striped:true,//单元格显示条纹 singleSelect:false//默认不单选 "> <thead data-options="frozen:true"> <tr> <th data-options="field:"id",width:30,checkbox:true" sortable="true">编号</th> <th data-options="field:"account",width:80" sortable="true">用戶帳號</th> <th data-options="field:"nickname",width:100" sortable="true">用戶姓名</th> </tr> </thead> <thead> <tr> <th data-options="field:"email",width:220" sortable="true">电子邮件</th> <th data-options="field:"bind_emp",width:80" sortable="true">使用者</th> <th data-options="field:"lang-sets",width:80" sortable="true">语言</th> <th data-options="field:"login_count",width:60,align: "center"" sortable="true">登錄次數</th> </tr> </table> </div> </div>ThinkPHP后台取数据代码:
public function getJsonList(){ $filter = json_decode(stripslashes($_REQUEST["filterRules"]),true);//添加反斜杠并将JSON字符串转化为数组 foreach($filter as $key=>$data){ $map[$data["field"]] = array("like","%".$data["value"]."%"); } $noInId = session(C("USER_AUTH_KEY")); $model = D("User"); ..此处省略了代码... }实现效果如:
如果在datagrid 的 data-options中设置filter的属性filterDefaultText为true的话,则为:
本文由hongping626在CSDN首发,如有转载请注明出处!http://blog.csdn.net/hongping626/article/details/16856191
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: thinkphp 搭建项目实践一
- 下一篇: $.inArray()使用方法