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. 编码解码--三种常见字符编码简介:ASCII、Unicode和UTF-8

    什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255( ...

  2. 20145322 《Java程序设计》第7周学习总结

    20145322何志威 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 如果使用JDK8的话,可以使用Lambda特性去除重复的信息. 在只有Lambda表达式的情况下,参 ...

  3. linux字典生成工具crunch

    安装 tar zxvf crunch-3.6.tgz cd crunch-3.6 gcc -Wall -lm -pthread -std=c99 -m64 -D_LARGEFILE_SOURCE -D ...

  4. 2019 google kickstart round A

    第一题: n个人,每个人有一个对应的技能值s,现在要从n个人中选出p个人,使得他们的技能值相同. 显然,如果存在p个人的技能值是相同的,输出0就可以了.如果不存在,就要找出p个人,对他们进行训练,治他 ...

  5. 转:web.xml 中的listener、 filter、servlet 加载顺序及其详解

    在项目中总会遇到一些关于加载的优先级问题,刚刚就遇到了一个问题,由于项目中使用了quartz任务调度,quartz在web.xml中是使用listener进行监听的,使得在tomcat启动的时候能马上 ...

  6. 微服务(一)eureka

    Eureka概述 一个简单的服务注册,服务发现架构 在CAP理论中,eureka选择了ap,作为注册中心,数据可用比数据不一致更重要 逻辑架构图 Eureka特性 1.当注册中心挂了,客户端之间依然可 ...

  7. C++输入/输出流

    2017-08-17 09:03:28 writer:pprp 基本的输入/输出流 默认情况下,输入操作会丢弃前导空白,读取数据,遇到空白的时候停止读入: 如果希望的如包括空白在内的任意字符,可以使用 ...

  8. 关于Google play无法下载应用

    查看网络连接是否正常 查看账号信息 以上两种都没有问题,那可能是缓存的问题,去应用里面清楚缓存以后,重启手机. 如果还是不行,就在应用程序中 清除全部数据,重启手机,这样就可以了. ps:不管你行不行 ...

  9. poj 2229 Sumsets 完全背包求方案总数

    Sumsets Description Farmer John commanded his cows to search for different sets of numbers that sum ...

  10. MyEclipse2014.Maven自动更新

    1.我把 "Do not automatically update dependencies from remote repositories" 和 "Download ...