ecshop 中分页的介绍

分页在一个大型系统中是必不可少的,当数据量过大时,一页显示的内容是有限的,这时我们就想把数据分页展示,下面介绍下mysql下的分页原理,以及ecshop中的分页函数的使用。

mysql中的分页主要是通过关键词limit来实现的, limit 可以给以给起始值,然后再给一个范围,就可以逐次地取出所有的数据。

举个简单的例子:

create table user(int 10 not null auto_increment,

name varchar(20),

sex tinyint(1),

reg_time datetime NOT NULL DEFAULT ‘0000-00-00 00:00:00‘,

) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

创建出user表,插入测试数据。

insert into user(`name`,`sex` `reg_time`) values(‘zhangsan‘,‘1‘,‘2012-02-09 02:00:00);

insert into user(`name`,`sex` `reg_time`) values(‘zaoren‘,‘1‘,‘2012-02-09 14:00:32);

insert into user(`name`,`sex` `reg_time`) values(‘lily‘,‘0‘,‘2013-08-10 10:06:00);

insert into user(`name`,`sex` `reg_time`) values(‘lizi‘,‘0‘,‘1956-00-56 10:10:50);

insert into user(`name`,`sex` `reg_time`) values(‘zhangsan2‘,‘1‘,‘1999-00-34 03:08:00);

insert into user(`name`,`sex` `reg_time`) values(‘zhangsan3‘,‘0‘,‘1998-00-24 00:23:00);

insert into user(`name`,`sex` `reg_time`) values(‘zhangsan4‘,‘1‘,‘2013-00-00 00:12:00);

insert into user(`name`,`sex` `reg_time`) values(‘qunhao‘,‘1‘,‘2014-00-00 00:00:00);

insert into user(`name`,`sex` `reg_time`) values(‘zhangsan4‘,‘1‘,‘2014-10-30 09:56:00);

insert into user(`name`,`sex` `reg_time`) values(‘zhangsan6‘,‘1‘,‘2013-06-00 05:01:00);

insert into user(`name`,`sex` `reg_time`) values(‘zhangsan8‘,‘1‘,‘2016-00-00 00:00:00);

insert into user(`name`,`sex` `reg_time`) values(‘hongyezhang‘,‘0‘,‘2015-00-00 00:00:00);

insert into user(`name`,`sex` `reg_time`) values(‘zhangsan‘,‘1‘,‘2008-08-080 00:00:00);

之后通过limit就可以分批取出用户信息:

select * from `user` order by `reg_time` limit 0,5;

select * from `user` order by `reg_time` limit 5,5;

select * from `user` order by `reg_time` limit 10,5;

通过改变limit 的初始值,就可以每次取出5条数据。

下面给出ecshop中的分页页码函数:

function get_pager($url, $param, $record_count, $page = 1, $size = 10)

{

$size = intval($size);

if ($size < 1)

{

$size = 10;

}

$page = intval($page);

if ($page < 1)

{

$page = 1;

}

$record_count = intval($record_count);

$page_count = $record_count > 0 ? intval(ceil($record_count / $size)) : 1;

if ($page > $page_count)

{

$page = $page_count;

}

/* 分页样式 */

$pager[‘styleid‘] = isset($GLOBALS[‘_CFG‘][‘page_style‘])? intval($GLOBALS[‘_CFG‘][‘page_style‘]) : 0;

$page_prev  = ($page > 1) ? $page - 1 : 1;

$page_next  = ($page < $page_count) ? $page + 1 : $page_count;

/* 将参数合成url字串 */

$param_url = ‘?‘;

foreach ($param AS $key => $value)

{

$param_url .= $key . ‘=‘ . $value . ‘&‘;

}

$pager[‘url‘]          = $url;

$pager[‘start‘]        = ($page -1) * $size;

$pager[‘page‘]         = $page;

$pager[‘size‘]         = $size;

$pager[‘record_count‘] = $record_count;

$pager[‘page_count‘]   = $page_count;

if ($pager[‘styleid‘] == 0)

{

$pager[‘page_first‘]   = $url . $param_url . ‘page=1‘;

$pager[‘page_prev‘]    = $url . $param_url . ‘page=‘ . $page_prev;

$pager[‘page_next‘]    = $url . $param_url . ‘page=‘ . $page_next;

$pager[‘page_last‘]    = $url . $param_url . ‘page=‘ . $page_count;

$pager[‘array‘]  = array();

for ($i = 1; $i <= $page_count; $i++)

{

$pager[‘array‘][$i] = $i;

}

}

else

{

$_pagenum = 10;     // 显示的页码

$_offset = 2;       // 当前页偏移值

$_from = $_to = 0;  // 开始页, 结束页

if($_pagenum > $page_count)

{

$_from = 1;

$_to = $page_count;

}

else

{

$_from = $page - $_offset;

$_to = $_from + $_pagenum - 1;

if($_from < 1)

{

$_to = $page + 1 - $_from;

$_from = 1;

if($_to - $_from < $_pagenum)

{

$_to = $_pagenum;

}

}

elseif($_to > $page_count)

{

$_from = $page_count - $_pagenum + 1;

$_to = $page_count;

}

}

$url_format = $url . $param_url . ‘page=‘;

$pager[‘page_first‘] = ($page - $_offset > 1 && $_pagenum < $page_count) ? $url_format . 1 : ‘‘;

$pager[‘page_prev‘]  = ($page > 1) ? $url_format . $page_prev : ‘‘;

$pager[‘page_next‘]  = ($page < $page_count) ? $url_format . $page_next : ‘‘;

$pager[‘page_last‘]  = ($_to < $page_count) ? $url_format . $page_count : ‘‘;

$pager[‘page_kbd‘]  = ($_pagenum < $page_count) ? true : false;

$pager[‘page_number‘] = array();

for ($i=$_from;$i<=$_to;++$i)

{

$pager[‘page_number‘][$i] = $url_format . $i;

}

}

$pager[‘search‘] = $param;

return $pager;

}

从中我们可以看出他通过伪造url参数来传值,比如这里参数page当前页面就是通过url传参get过来的。

分页页码显示需要的几个变量:

当前页面变量,

数据的条数,

每页显示的条数,

根据上面得出的总页数,

这样就可以得出最大的页码数,就可以进行分页码显示了。

给出一个url?page=2,则当前是第二页,第二页页码没有连接,

前一页的页码自然是url?page=1(-1)

下一页的页码自然是url?page=3(+1)

当前页面的内容,就可以通过

select * from table order by id limit 2*size, size,

每次通过调整limit初始值就可以达到取出表中的所有数据。

分页的实现就是考虑2部分,一部分是数据的分页显示,一部分就是页码的显示,上面给出的函数就是ecshop 中页码的显示函数,数据的显示通过自己的调整来实现。

时间: 2024-10-08 00:57:23

ecshop 中分页的介绍的相关文章

主流数据库分页查询介绍

1 背景概述 由于在项目中需要在页面上显示数量非常多的数据, 在进行数据库查询时首先会把所有的数据都查询出来,然后在进行显示,这时候分页查询的操作就必不可少了,本文介绍Mysql.Oracle.sql Server 三种数据库进行分页查询的用法. 2 预期读者 数通畅联内部员工 广大计算机爱好者 3 名词解释 分页查询 就是将将过多的结果在有限的界面上分多页来显示,一般将分页查询分为两类:逻辑分页.物理分页.    逻辑分页是在用户第一次访问时,将数据库的所有记录全部查询出来,添加到一个大集合中

extJS 中 ext.data 介绍

ext.data 最主要的功能是获取和组织数据结构,并和特定控件联系起来,于是,Ext.data成了数据的来源,负责显示数据. Ext.data在命名空间中定义了一系列store.reader和proxy.Grid和ComboxBox都是以Ext.data为媒介获取数据的,它包含异步加载.类型转换.分页等功能. Ext.data默认支持Array.JSON.XML等数据格式,可以通过Memory.HTTP.ScriptTag等方式获得这些格式的数据.如果要实现新的协议和新的数据结构,只需要扩展r

ecshop 中的json

ecshop中有2个地方使用了json,一个是cls_json.php文件,一个是transport.js文件. cls_json 封装了json类,可以调用里面的encode的方法,根据参数不同,进行不同的转化,调用json_encode可以直接进行转化.是php对json的处理. transport.js是ecshop封装的ajax方法,通过ajax.call 来实现ajax的调用.ajax传值的过程中,可以选择json来传递,一般也是选择它的,因为这样调用起来方便,转化也方便.所以它对js

[Sqlite3].help中的命令介绍

sqlite的安装1. 首先是下载sqlite,可以该页面下载:http://www.sqlite.org/download.html当前的最新版本为:sqlite-shell-win32-x86-3070701.zip这个是windows下sqlite的命令行管理工具,用它可以管理sqlite数据库文件,同时最好把文档也下载下来,里面包含了详细的sqlite的使用说明:sqlite-doc-3070701.zip 2. sqlite无需任何配置和安装,只要将下载下来的shell文件解压到任何你

ASP.NET MVC4中的App_start中BundleConfig的介绍使用

在BundleConfig.cs中,指定CSS和JS,主要用来压缩JS和CSS   在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题. 具体优势可自行百度或参看官方介绍:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification 这里仅简单记录下如

Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

 Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报  分类: Halcon 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] HWindowControl控件初步使用 最近在学习新的视觉处理工具–Halcon软件包,本人学习的主要是HDevelop.Halcon与C#混编以及Halcon与C++混编.这里再多缀一句:11版本后C++编程,包含的是h

LTE中的PDCCH介绍

PDCCH中承载的是DCI(Downlink Control Information),包含一个或多个UE上的资源分配和其他的控制信息.在LTE中上下行的资源调度信息(MCS, Resource allocation等等的信息)都是由PDCCH来承载的.一般来说,在一个子帧内,可以有多个PDCCH.UE需要首先解调PDCCH中的DCI,然后才能够在相应的资源位置上解调属于UE自己的PDSCH(包括广播消息,寻呼,UE的数据等) 前面提到过,LTE中PDCCH在一个子帧内(注意,不是时系)占用的符

ECshop中defined(&#39;IN_ECS&#39;)的实现原理

在PHP中经常看到如下代码 if (!defined('IN_ECS')) { die('Hacking attempt'); } 实现的原因以及原理如下: ecshop里的有些.php页是不需要用户通过url直接访问的,用来被其它页调用的,例如/includes/init.php,就不需要直接访问,通过url访问你的网址/includes/init.php是无意义的,所以我们在可以直接方问的php里加上define('IN_ECS', true); 例如在index.php中有如下代码,一开头

ecshop中猜你喜欢的原理

最近在实现ecshop中的一个猜你喜欢的原理,一直不明白这个是如何猜的,难道是根据最近浏览记录来得到?百思不得其解,就放下了这个问题,一天在百度搜索东西的时候,突然发现这个右边有个猜你喜欢的功能,其实以前也知道,这里有这个版块,只不过没加注意,这次经过仔细观察发现,原来猜你喜欢的时候,就根据你搜索的相关结果,关联出一些同类产品. 举个例子,比如我搜索notepad2的时候,notepad++,editplus等软件就被列入了猜你喜欢的类别中,因此,在ecshop中如果我们记录了用户的浏览记录,通