poscms基于list标签实现的查询分页功能

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():0;
        var cylt = $(".cylt").val()?$(".cylt").val():9999999999;
        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())/1000:0;
        var starttimet = $("#txtEndDate").val()?parseInt(new Date($("#txtEndDate").val()).getTime())/1000:9999999999;
        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%86%85%E6%B2%B3&cylf=2&cylt=9999999999&from=&to=&title=&starttimef=1535328000&starttimet=1535673600&order=cyl_desc

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

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

<?php
    $data = $_GET;
    $rtype = $data[‘rtype‘]?$data[‘rtype‘]:null;
    $cylf = $data[‘cylf‘]?$data[‘cylf‘]:0;
    $cylt = $data[‘cylt‘]?$data[‘cylt‘]:9999999999;
    $from = $data[‘from‘]?$data[‘from‘]:null;
    $to = $data[‘to‘]?$data[‘to‘]:null;
    $title = $data[‘title‘]?$data[‘title‘]:null;
    $starttimef = $data[‘starttimef‘]?$data[‘starttimef‘]:0;
    $starttimet = $data[‘starttimet‘]?$data[‘starttimet‘]:9999999999;
    $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=2 pagesize=12 page=1}
 ......
{/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 2 AND 9999999999 AND `imt_1_goodsplate`.`starttime` BETWEEN 1535328000 AND 1535673600 AND `imt_1_goodsplate`.`catid` = 2 AND `imt_1_goodsplate`.`status` = 9 ORDER BY `imt_1_goodsplate`.`cyl` DESC LIMIT 0,12

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=1;}
 {else}
 {php $page=$get.page;}
 {/if}

 <!--上一页-->
 {if $page > 1}
 {php $pra = $page-1;}
 {else}
 {php $pra=1;}
 {/if}
 <!--下一页-->
 <!--$nums为最大页码-->
 {if $page==$nums}
 {php $next = $nums;}
 {else}
 {php $next = $page+1;}
 {/if}
 {if $nums==1}
     <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页面,所有的一切只需要在这个页面就可以完成!!!惊喜不惊喜?刺激不刺激?

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

原文地址:https://www.cnblogs.com/eco-just/p/9545413.html

时间: 2024-10-10 14:14:48

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

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

最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一个Mvc 项目,既然是分页就需要一些数据,我这边是模拟了一些假的数据,实际的项目中都是在数据库中去取得的,很简单的数据: 1 public class User 2 { 3 public string Name { get; set; } 4 5 public int Age { get; set; } 6 } 取数据我这边是加了120个数据: 1 publ

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

最近写了一个mvc 的 分页,样式是基于 bootstrap 的 ,提供查询条件,不过可以自己写样式根据个人的喜好,以此分享一下.首先新建一个Mvc 项目,既然是分页就需要一些数据,我这 边是模拟了一些假的数据,实际的项目中都是在数据库中去取得的,很简单的数据: public class User { public string Name { get; set; } public int Age { get; set; } } 取数据我这边是加了120个数据: public List<User>

RDIFramework.NET 中多表关联查询分页实例

RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为指导思想,作为异质系统整合与互操作性.分布式应用提供了可行的解决方案. 分页非常的常见,基本任何项目都会涉及到分页,这没什么好谈的,大多数我们分页对单表的分页比较多,对多表的分页我们可以通过视图来实现,当然还有其他的方式,在这儿,我以一个实例展示下使用我们的RDIFramework.NET来实现多表

Oracle基本语法&amp;&amp;函数&amp;&amp;子查询&amp;&amp;分页查询&amp;&amp;排序&amp;&amp;集合操作&amp;&amp;高级分组函数

一.  数据库 手工---文件管理---数据库 DB:Database 数据库. DBMS:管理数据库的软件.(oracle) 主流关系数据库: 1.      Oracle 2.      DB2 3.      SQL Server 基本没人使 4.      MySQL  基本没人用,免费 Linux 开源,可以发现漏洞补上 Windows服务器会有补丁,数据易泄漏 eclipse 日食 数据表(Table): 表的行(Row):记录 表的列(Column):字段 二.  关系型数据库 一

动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版

一.前言 多条件查询分页以及排序  每个系统里都会有这个的代码 做好这块 可以大大提高开发效率  所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF 在做多条件搜索时 都有这类似的代码 这样有几个不好的地方 1.当增加查询条件,需要改代码,对应去写相应的代码. 2.对多表查询以及or的支持 不是很好.而我们很常见的需求不可能是一个表的查询 3. 这样写表示层直接出现 了SQL语句 或者 linq 的拉姆达表达式  这是很不好的 表示层不应该知道数

基于java最短路径算法公交查询系统的设计与实现

基于J2EE的公交查询系统的设计与实现 1引言 1.1 选题背景 20多年来,我国经济得到了持续.快速.稳定.健康地发展.经济的快速增长,带动了汽车工业的蓬勃发展,并使交通状况显著改善.据统计,中国公路通车总里程已达130余万公里,其中高速公路约1.5万公里.居民收入普遍提高,到2000年年底,人均GDP已超过800美元,沿海地区已达2000-3000美元.按国际发展惯例,当人均GDP超出1000美元,汽车消费市场就将进入快速增长期.我国城市人口约有2亿,略低于美国人口.东部沿海地区大部分居民已

实现查询分页以及隔行变色

在网页的显示中,经常需要用到将查询到的信息显示在页面上,当查询到的信息较多时,需要用到分页查询,将信息分页显示,为了区分每一行,所以要设置一个隔行换色的特效.Hibernate的Query对象提供了分页查询的功能,是setFirstResult和setMaxResults用于设置查询记录的第一条记录和每一也最大记录数,然后使用query.list()方法获取该页相关信息. 下面看具体代码,首先使用Page类封装分页查询的相关信息: package tool; import java.util.L

基于Impala平台打造交互查询系统

本文来自网易云社区 原创: 蒋鸿翔 DataFunTalk 本文根据网易大数据蒋鸿翔老师DataFun Talk--"大数据从底层处理到数据驱动业务"中分享的<基于Impala平台打造交互查询系统>编辑整理而成,在未改变原意的基础上稍做整理. 以上是今天的内容大纲,第一个讲一下交互式查询的特点,在大数据平台有很多查询平台可以选择,第二个讲一下依据项目如何选择平台,选型因素是什么.第三个讲一下Impala基本介绍,以及在Impala上的改进.接下来是impala的应用场景,最

C#编写了一个基于Lucene.Net的搜索引擎查询通用工具类:SearchEngineUtil

最近由于工作原因,一直忙于公司的各种项目(大部份都是基于spring cloud的微服务项目),故有一段时间没有与大家分享总结最近的技术研究成果的,其实最近我一直在不断的深入研究学习Spring.Spring Boot.Spring Cloud的各种框架原理,同时也随时关注着.NET CORE的发展情况及最新技术点,也在极客时间上订阅相关的专栏,只要下班有空我都会去认真阅读观看,纸质书箱也买了一些,总之近一年都是在通过:微信技术公众号(.NET.JAVA.算法.前端等技术方向).极客时间.技术书