poscms系统本身有一个在查询页(search页面)实现的查询分页功能,基于系统封装的php函数dr_search_url()

但是今天的需求除了导航栏、列表页、详情页都实现查询功能外,关键是有两个不同的模块,模块不同,如果用

系统的search的话,那就得弄两个search页面出来,其实搜索结果页面完全就是照搬列表页,所以,我为什么不

直接用列表页作为模板呢,不去走系统的search控制器。下面上列表页:

1.筛选条件的获取以及查询页的路径拼接

<div class="paixu">
<span>排序方式:</span>
    <a class="xuanxiang active" href="javascript:search('starttime');">装载日期</a>
    <a class="xuanxiang" href="javascript:search('cyl');">承运量从高到低</a>
    <a class="xuanxiang" href="javascript:search('cyl_desc');">承运量从低到高</a>
    <a class="xuanxiang" href="javascript:search('you');">有效天数</a>
</div>
<script type="text/javascript" charset="utf-8">
function search(order){
var rtype = $(".rtype").val();
var cylf = $(".cylf").val()?$(".cylf").val():;
var cylt = $(".cylt").val()?$(".cylt").val():;
var from = $(".from").val()?$(".from").val():"";
var to = $(".to").val()?$(".to").val():"";
var title = $(".title").val()?$(".title").val():"";
var starttimef = $("#txtBeginDate").val()?parseInt(new Date($("#txtBeginDate").val()).getTime())/:;
var starttimet = $("#txtEndDate").val()?parseInt(new Date($("#txtEndDate").val()).getTime())/:;
window.location.href = "/index.php?s=goodsplate&c=category&id=2"+"&rtype="+rtype+"&cylf="+cylf+
                  "&cylt="+cylt+"&from="+from+"&to="+to+"&title="+title+"&starttimef="+
                  starttimef+"&starttimet="+starttimet+"&order="+order;
};
</script>

页面是前端小姐姐写的,日历点击之后,获取的值为字符串 2018-08-27 的形式,我得要把它转成 int 型的时间戳

才能用于后面的查询比较;

看到那些三元表达式后面flase赋值为0或者9999999999么,这是根据该字段在数据库中的实际值范围而取的,数据

库中时间戳为10位数,所以我这里设置了一个不选定时间上限时的查询条件值(9999999999);

另外,当前列表页路由是  /index.php?s=goodsplate&c=category&id=2 ,所以可以看出js将查询条件直接提交到当前

页面;

当点击不同排序条件时,将执行对应的函数,此时将排序条件通过函参的方式拼接到路径中;

2.php脚本获取地址栏查询条件参数

点击查询条件之后,将跳转到拼有查询条件的路由(不难看出还是这个列表页),接下来通过php脚本获取地址栏参数

先来看路径(出货港、卸货港、货品名称没有填):

/index.php?s=goodsplate&c=category&id=2
&rtype=%E5%%%E6%B2%B3&cylf=&cylt=&from=&to=&title=
&starttimef=&starttimet=&order=cyl_desc

所以,你可以很直观地看到一些筛选条件(分类-内盒、承运量范围-2~9999999999、装载日期范围-1535328000~

15356736000、排序方式-承运量降序)

<?php
$data = $_GET;
$rtype = $data['rtype']?$data['rtype']:null;
$cylf = $data['cylf']?$data['cylf']:;
$cylt = $data['cylt']?$data['cylt']:;
$from = $data['from']?$data['from']:null;
$to = $data['to']?$data['to']:null;
$title = $data['title']?$data['title']:null;
$starttimef = $data['starttimef']?$data['starttimef']:;
$starttimet = $data['starttimet']?$data['starttimet']:;
$order = $data['order']?$data['order']:null;
?>

注:poscms的list标签查询的时候,对于查询条件值为null的会过滤掉,也就是不会写到sql里去。

3.list标签查询

在上面的脚本后面,就需要根据拿到的条件来写list标签的语法了:

{list action=module module=goodsplate
rtype=$rtype LIKE_title=%$title% LIKE_from=%$from% LIKE_to=%$to%
BW_cyl=$cylf,$cylt BW_starttime=$starttimef,$starttimet
order=$order
catid= pagesize= page=}
......
{/list}

中间加粗的字体就是查询的主要条件,用到了模糊查询(LIKE_)、范围查询(BW_)和排序(order)

这样就根据条件实现了list标签的了查询,顺便来看一下生成的sql:

SELECT * FROM `imt_1_goodsplate` WHERE
`imt_1_goodsplate`.`rtype` = "内河" AND
`imt_1_goodsplate`.`title` LIKE "%%" AND
`imt_1_goodsplate`.`from` LIKE "%%" AND
`imt_1_goodsplate`.`to` LIKE "%%" AND
`imt_1_goodsplate`.`cyl` BETWEEN AND AND
`imt_1_goodsplate`.`starttime` BETWEEN AND AND
`imt_1_goodsplate`.`catid` = AND
`imt_1_goodsplate`.`status` =
ORDER BY `imt_1_goodsplate`.`cyl` DESC
LIMIT ,

4.分页功能

其实分页功能的实现依据是一个page值,通过在路径中添加page=number,来实现后端LIMIT参数的改变

注意:poscms有个很坑爹的地方就是这个limit,我们一般要实现从第10项开始,往后查5项,都会这么写:

limit(10,5),但是poscms却是这么写的:$this->db->limit(5,10),这个源程序的开发者怕是故意和大家作对

吧。

之前查询结果很多的话,就得分页了,那1、2、3页的路径怎么获取呢,首先我封装了一个一行的php函数

方便页面里面调用:

function dr_cururl(){
return $_SERVER['REQUEST_URI'];
}

这个方法返回地址栏的全部地址(其实这块有个小bug,但是不影响使用,就是当页面处于第二页的时候,

地址栏会有查询条件参数+&page=2,此时第三页的地址应该是通过dr_cururl()函数获取的地址截去page参数

加上page=3,不截去的话就变成了条件参数+&page=2&page=3,这也是我刚刚想到的,明天去完善一下这个

函数)

在这里我用了一个同事以前提供的判断上一页下一页page值的脚本,之前的脚本a标签的地址是写死的,我后期

通过上面的函数完善了一下,这里贴上代码:

 {if empty($get.page)}
{php $page=;}
{else}
{php $page=$get.page;}
{/if} <!--上一页-->
{if $page > }
{php $pra = $page-;}
{else}
{php $pra=;}
{/if}
<!--下一页-->
<!--$nums为最大页码-->
{if $page==$nums}
{php $next = $nums;}
{else}
{php $next = $page+;}
{/if}
{if $nums==}
<div class="inner" style="text-align:center;margin-top:20px;">
<a>共{$nums}页</a>
</div>
{else}
<div class="inner" style="text-align:center;margin-top:20px;">
<a>共{$nums}页</a>
<a href="{dr_cururl()}&page=1">首页</a>
<a href="{dr_cururl()}&page={$pra}">上一页</a>
<a href="{dr_cururl()}&page={$next}">下一页</a>
<a href="{dr_cururl()}&page={$nums}">尾页</a>
</div>
{/if}

注意:$nums是poscms系统开启分页(list标签中有page=1时开启分页)后返回的最大页数

至此,就完成了在列表页实现的查询、分页功能,注意,除了dr_cururl()这个函数是写在公共函数库文件里面,

其他所有上面列出的代码都是写在列表页的,所有的东西都是写在这个页面(list页面)的,不需要去动系统的

控制器,不需要去建search页面,所有的一切只需要在这个页面就可以完成!!!惊喜不惊喜?刺激不刺激?

好了,继续下一篇,来谈谈针对前端小姐姐抛出的问题,我是怎么解决的。

poscms基于list标签实现的查询分页功能的更多相关文章

  1. 基于SSM框架的简易的分页功能——包含maven项目的搭建

    新人第一次发帖,有什么不对的地方请多多指教~~ 分页这个功能经常会被使用到,我之前学习的时候找了很多资源,可都看不懂(笨死算了),最后还是在朋友帮助下做出了这个分页.我现在把我所能想到的知识 做了一个 ...

  2. CodeIgniter框架多条件搜索查询分页功能解决方案

    最近在用ci框架写功能的时候,需要用到分页功能,本来寻常的数据结果分页是比较简单的,但是这次写的功能是多条件搜索查询分页,就有点难度了,看官方手册下面评论好多人问, 正常的分页功能例子是这样的: $t ...

  3. phpcmsv9多表联合查询分页功能实现

    phpcms v9里面自带的listinfo分页函数蛮好用的,可惜啊.不支持多表查询并分页. 看了一下前台模板层支持get标签,支持多表查询,支持分页.刚好可以把这个功能搬到后台来使用. 我们现在对g ...

  4. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  5. 利用Bootstrap Paginator插件和KnockoutJS完成分页功能

    在最近一个项目中,需要结合一堆条件查询并对查询的结果数据完成一个简单分页功能,可是做着做着,自己的思路越来越模糊,做到心态崩溃!!! 哈哈,特此花点时间重新总结,并从最简单的分页,然后向多条件查询分页 ...

  6. aspnetpager+repeater+oracle实现分页功能

    一.设计原理阐述 数据查询分页,这个功能相信大家都很熟悉,通过数据库或其它数据源进行查询操作后,将获得的数据显示到界面上,但是由于数据量太大,不能一次性完全的显示出来,就有了数据分页的需求.这个需求在 ...

  7. 基于Bootstrap的Asp.net Mvc 分页

    基于Bootstrap的Asp.net Mvc 分页的实现 最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一 ...

  8. 基于Bootstrap的Asp.net Mvc 分页的实现

    最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一个Mvc 项目,既然是分页就需要一些数据,我这边是模拟了一些 ...

  9. 基于Bootstrap的Asp.net Mvc 分页的实现(转)

    最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一个Mvc 项目,既然是分页就需要一些数据,我这 边是模拟了一 ...

随机推荐

  1. CMake入门教程(转帖)

    本文转自:https://www.cnblogs.com/never--more/p/6921837.html CMake入门教程 参考文献:http://www.ibm.com/developerw ...

  2. c++ 使用WinHTTP实现文件下载功能

    因为要项目中要想要实现一个软件自动更新的功能,之前是使用socket直接下载.但切换下载源的时候很麻烦.所以换用http方式. 网上找了很多资料,基本上就是下面几种: 1.curllib //功能强大 ...

  3. 关于JavaScript对象中的一切(二) -- 继承

    先上一张我制作的思维导图.

  4. 【读书笔记】《深入浅出nodejs》第四章 异步编程

    1. 异步编程的基础 -- 函数式编程 (1)高阶函数 -- 是可以把函数作为参数,或是将函数作为返回值的函数. (2)偏函数用法 -- 创建一个调用另外一个部分 -- 参数或变量已经预置的函数 -- ...

  5. 学Git,用Git ②

    之前介绍了git的最核心功能游戏存档式的本地版本管理.这会我们介绍git剩下的两个核心功能:分支和远程仓库. 1.Git游戏存档进化版--Git分支 git分支的思想很有意思,git允许我们可以随时从 ...

  6. 一文弄懂神经网络中的反向传播法——BackPropagation【转】

    本文转载自:https://www.cnblogs.com/charlotte77/p/5629865.html 一文弄懂神经网络中的反向传播法——BackPropagation   最近在看深度学习 ...

  7. 【转载】showModalDialog returnValue is undefined in Google Chrome

    showModalDialog returnValue is undefined in Google Chrome Posted on August 22, 2012by briancaos For ...

  8. vue集成ueditor

    相关代码见github 1.引入ueditor相关的文件,具体目录见下图如下 我将下载的文件放在static下面,这里专门用来放置相关的静态文件 (在ueditor.config.js需要配置一下路径 ...

  9. Spring Container的扩展点

    转自: http://blog.csdn.net/kkdelta/article/details/5488430 Spring在解析完配置文件后,会调用一些callback方法,使用Spring的开发 ...

  10. UVa 10883 超级平均数(二项式系数+对数计算)

    https://vjudge.net/problem/UVA-10883 题意: 给出n个数,每相邻两个数求平均数,依次类推,最后得到1个数,求该数. 思路: 演算一下可以发现最后各个数的系数就是二项 ...