最近在项目中遇到了需要根据下拉框的条件筛选出符合条件的数据,然后进行列表显示的问题。

在ThinkPHP中进行列表显示的传统过程:通过在后台控制器中查询出数据,然后通过$this->assign()来实现控制器数据向页面的传递,在页面中通过<foreach>或<volist>标签来进行数据的解析,(注:在通过标签进行数据的解析时需要以“$”符号的形式)。

在进行条件查询时,需要通过jquery中ajax的方式将条件GET到后台控制器,后台控制器中接收数据,然后根据条件进行查询,将查询结果返回。

在项目实际操作时遇到了这样的两个问题,(1)当在将数据传递到后台控制器,后台控制器通过查询条件获取查询结果后,只能通过$this->ajaxReturn(查询结果)的方式将数据返回到前台页面的回调函数(在网上看到一个大神说还有一个display的方法显示,一直苦寻未果,若有大神知道,一定记得给说一声,感激不尽!)。而在前台进行解析时是以json的数据格式进行解析,所以无法通过ThinkPHP的模板解析获得数据进行显示(即无法通过"$"符号的方式进行解析显示,"$"符号是javascript中的关键字)。(2)在开始时分页是使用的ThinkPHP中已经封装的分页方法,其在进行分页时是实例化的一个分页对象,然后将分页对象中的分页列表传递到页面进行解析,从而实现页面数据分页。但是在通过ajax请求获取的数据只能返回到回调函数,也无法通过ThinkPHP的解析获取分页列表,从来导致分页无法使用。所以,总的来说,无法通过ThinkPHP解析json数据进行显示。

在网上苦苦寻觅,没有找到什么好办法,所以只好自己硬着头皮写了。因为ThinkPHP无法解析,所以只好通过javascript的方式,将数据解析显示。

 for(var i=0;i<ss.length;i++)
{
var infoList=$("<div id='divUserTable' class='divMenuItemTableClass'>"+"<input type='hidden' name='hiddenInfoId' class='hiddenClass' id='hiddenInfoId_"+i+"'"+"value="+"'"+ss[i]["userid"]+"'"+"/>"
+"<div id='divUserTableSelect' class='fontNoneWeight'><input type='checkbox' class='inputCheckbox' id='checkboxUserSelect_"+i+"'"+"/></div>"
+"<div id='divUserTableTitle' class='fontNoneWeight'>"+ss[i]["user_name"]+"</div>"
+"<div id='divUserTableNum' class='fontNoneWeight'>"+ss[i]["studentorteacherid"]+"</div>"
+"<div id='divUserTablePwd' class='fontNoneWeight'>"+ss[i]["password"]+"</div>"
+"<div id='divUserTableWorkShop' class='fontNoneWeight'>"+ss[i]["workshop_name"]+"</div>"
+"<div id='divUserTableOpreation'><div id='divUserTableOpreationUpdate'><a id='aWorkShopTableOperationUpdate' target='right' href='__APP__/Admin/WorkShop/ShowUpdateWorkShopUser/user_id/"+ss[i]["userid"]+"'"+">修改</a></div></div>"
+"</div>");
$("#divUserInfoList").append(infoList);
}

通过将获取的数据进行解析,然后进行字符串的拼接,最后将拼接的字符串显示到列表中,从而实现以无刷新的方式进行按条件查询后显示到页面,至此终于将第一个问题解决了!(说句实话,字符串拼接真的很恶心人!众位仁兄,若有好方法,请务必告知!)。

唉,由于分页无法解析,内心苦苦挣扎,经过激烈的思想斗争,终于狠下心来重新写一个分页吧。所以学习了一下EasyUI的pagination分页,确实功能强大,非常实用。

先插入一点题外话,说一下EasyUI的pagination分页的使用。在使用pagination分页时首先需要引入EasyUI的文件包,引入后需在页面引入jquery.easyui.min.js、themes/default/easyui.css、themes/icon.css这三个文件。这样页面才可以使用分页。分页的使用有两种加载方式,(1)class加载方式(2)js加载方式

class加载:

<div id="box" class="easyui-pagination"
data-options="total:2000,pageSize:10"
style="background:#efefef;border:1px solid #ccc;">
</div>

通过在div中添加class="easyui-pagination"就可以将分页加载进来,data-options="total:2000,pageSize:10,"是对分页列表中数据或操作的设置。

js加载:

$(function () {

    $('#box').pagination({
total : 5,
pageSize : 1,
pageNumber : 1,
pageList : [1,2],
//loading : true,
buttons : [{
iconCls : 'icon-add',
},'-',{
iconCls : 'icon-edit',
}],
//layout : ['first','prev','links','next','last'],
//showPageList : false,
//showRefresh : false,
//beforePageText : '弟弟',
//afterPageText : '有{pages}个',
displayMsg : '从{from}到{to},有{total}人',
onSelectPage : function (pageNumber, pageSize) {
$('#box').pagination('loading');
$('#content').panel('refresh', 'user.php?page='+pageNumber+'&pagesize='+pageSize);
setTimeout(function () {
$('#box').pagination('loaded');
}, 1000); },
onBeforeRefresh : function (pageNumber, pageSize) {
alert('刷新之前');
},
onRefresh : function (pageNumber, pageSize) {
alert('刷新之后');
},
onChangePageSize : function (pageSize) {
alert('每页显示的条数被改变!');
}
}); $(document).click(function () {
/*
$('#box').pagination('refresh', {
pageSize : 2,
pageNumber : 2,
});
*/
$('#box').pagination('select', 2);
}); });

通过在js文件中$("#id").pagination({});的方式将对应id的div设置成分页列表。说到这里,就无可避免的需要说一下pagination的属性列表:

其中,主要用的有total:数据的总条数,pageNumber:当前显示的页码数,pageSize:每页显示的数量,pageList:可让用户自己手动改变的每页显示的数量。有了这些足以做数据的分页了。

回归正题:现在需要将所需条件进行提交,然后获取数据,同时进行分页。话不多说,上代码。

 $.ajax({
type:"GET",
url:"__URL__/GetCountByClassify",
data:{con:condition},
dataType:"json",
success:function(ss){
var sum=ss[0]["count(*)"];
$("#divUserListPaging").pagination({
total:sum,
pageSize:10,
showPageList:false,
beforePageText:"第",
afterPageText:"共{pages}页",
pageNumber:pageNum,
onSelectPage: function ( pageNumber, pageSize) {
$(this).pagination('loading');
newData(pageNumber,pageSize);
$(this).pagination('loaded');
makePage(pageNumber);
}
});
}
});

根据路径将条件传递到控制器的方法中,通过条件查询获取查询结果,然后获取查询结果的总数量,回调分页函数,根据当前的显示页码和显示数量,进行数据分页。(解决第二个问题,用EasyUI解决了分页的问题)。

苦思了几天,终于将这个问题解决,不知道这是不是最好的解决办法,若各位大神有更好地方法,烦请告知!感激不尽啊!

ThinkPHP中 按条件查询后列表显示的更多相关文章

  1. SSM-MyBatis-13:Mybatis中多条件查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ...

  2. ecshop后台根据条件查询后不填充table 返回的json数据,content为空?

    做ecshop后台开发的时,根据条件查询后,利用ajax返回的content json数据内容为空,没有填充table 效果 预期效果 问题: make_json_result($smarty -&g ...

  3. C# 将Access中时间段条件查询的数据添加到ListView中

    C# 将Access中时间段条件查询的数据添加到ListView中 一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Col ...

  4. Hibernate中的条件查询完成类

    Hibernate中的条件查询有以下三个类完成: 1.Criteria:代表一次查询 2.Criterion:代表一个查询条件 3.Restrictions:产生查询条件的工具类

  5. ormlite 在android中 排序 条件查询

    ormlite 在android中 排序 条件查询 all = dao.queryBuilder().orderBy("Id", true).where().eq("Ty ...

  6. Hibernate中的条件查询完毕类

    Hibernate中的条件查询有下面三个类完毕: 1.Criteria:代表一次查询 2.Criterion:代表一个查询条件 3.Restrictions:产生查询条件的工具类

  7. thinkphp中的exp查询

    今天遇到一个问题,就是在vendor表中查询出vendor_id = vendor_f_id的数据,其实使用原生的sql语句是非常简单的: select * from vendor where ven ...

  8. SQL中多条件查询括号的用途

    界面: 代码 0 posted @ 2009-12-15 13:28 唔愛吃蘋果 阅读(8640) 评论(0)  编辑 收藏

  9. THINKphp中复杂的查询

    字符串拼接查询 案例一:拼接字符串(多条件查询) $where = ''; //定义字符串,用于拼接满足条件的数据字段 $value = []; // 定义空数组,用于接收值 if(!empty($n ...

随机推荐

  1. BZOJ 1564: [NOI2009]二叉查找树( dp )

    树的中序遍历是唯一的. 按照数据值处理出中序遍历后, dp(l, r, v)表示[l, r]组成的树, 树的所有节点的权值≥v的最小代价(离散化权值). 枚举m为根(p表示访问频率): 修改m的权值 ...

  2. Github 常用命令

    小记一些Github常用命令 : 在一个项目中... 假如要修补问题追踪系统上的 #53 问题.顺带说明下,Git 并不同任何特定的问题追踪系统打交道.这里为了说明要解决的问题,把新建的分支取名为 i ...

  3. php 截取字符串

    /** * 方法库-截取字符串-[该函数作者未知] * @param string $string 字符串 * @param int $length 字符长度 * @param string $dot ...

  4. J2SE知识点摘记(一)

    1.        数组的声明时无法指定数组的长度. 2.        一维数组的声明和内存的分配 "数据类型    数组名[]; //声明一维数组     数组名=  new 数据类型[ ...

  5. Android-Ant自动编译打包android项目 -- 2 ----签名与渠道包

    上篇介绍了怎么使用ant自动编译打包现有的android项目,这篇将继续介绍如果如何在ant打包应用的时候加入签名信息以及自动打包渠道包. 1. 加入签名信息: 在项目的根目录下建一个ant.prop ...

  6. docker 创建新的镜像到私有仓库

    docker:/data# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd6db4127a9e centos &q ...

  7. mit java open course assignment #2

    package come; public class Marothon { public static void FirstName(String[] args1,int[] args2){ int ...

  8. ceph理论及部署配置实践

    prefaces: ceph installation(quick)1,preflight(ins ceph-deploy repo tools)2,ceph storage cluster quic ...

  9. [置顶] 自娱自乐6之Linux gadget驱动5(自编gadget驱动,包涵与之通讯的主机usb驱动,已调试通过)

    这个代码调试,你首先要保证你的udc驱动没用问题,这个有些矛盾,应为我本来要用gadget驱动来调试udc驱动,结果反过来了. 这是在zero基础改的,大概的改动 1. 去掉loop. 2. sink ...

  10. C语言中为什么不能把char**赋给const char**

    这是我在知乎回答的一个问题. 这个问题是C中的一个深坑,首先说结论: char ** 和 const char ** 是两个不相容(incompatible)的类型,能够理解为不能直接赋值 在C11的 ...