您的位置:BugFree > 论坛 > 技术支持 > Learn BugFree[阅读BugFree代码] > BugFree查询结果的分页功能实现解析
2005-10-14 09:15:19 BugFree查询结果的分页功能实现解析
#1
Mr.Lee
访问次数 : 241
注册日期 : 05-10-06 10:46
上次访问 : 09-10-29 21:05
之前一直没有做过Web开发,这段时间在看Bugfree的代码时,被bugfree的分页功能的实现给难住了,不知道是怎么实现。经过两天的阅读、分析现在总算明白了,现分享给大家。

分页导航条的功能由以下文件实现
IncludeClassPage.class.php
IncludeFunctionsMain.inc.php

IncludeClassPage.class.php
该文件主要被外部调用的方法有三个:
1、function Init($TableName,$RecTotal="",$RecPerPage=20,$PageID,$URL="",$Where="")//实现分页的初始化
2、function Show($SectionMax = 15,$Align="center",$JsOut = false) //返回一个分页导航条(Html代码)
3、function Limit() //这个是关键,后面说

IncludeFunctionsMain.inc.php
//这个是整个程序的公用代码集中区,其中跟分页功能相关的函数是:
function bugGetInfo($Fields = "Mini", $Where = "", $ShortTitleLength = 20, $Append = true)
这个函数将根据参数$Where生成SQL语句并查询,将结果以一个数组的形式返回给调用者。数组格式是这样子的:
$BugList arry(
[bugID]=>array(一条记录)
[bugID]=>array(一条记录)
[bugID]=>array(一条记录)
)

我们来看看调用上面函数的地方:
//初始化
$MyPage->init("BugInfo",$_GET["RecTotal"], $BugConfig["RecordPerPage"], $_GET["PageID"], $URL, $PageWhere);

...

//得到数据(以数组的形式返回)
$BugList = @array_reverse(bugGetInfo($_COOKIE["CustomFields"], $_SESSION["QueryCondition"].$_SESSION["OrderCondition"].$MyPage->limit(), $BugConfig["QueryTitleLength"], true));

...
//把导航条赋值给模板文件
$TPL->assign("RecordPage", $MyPage->show());
...
//把数据赋值给模板文件
$TPL->assign("BugList",$BugList);
...

再来看看模板文件是怎么显示出来的:
TemplateQueryBug.tpl

...
//直接把导航条显示出来
{$RecordPage}
...
//用samrty 类的foreach语句把记录显示出来
{foreach from=$BugList key=BugID item=BugInfo}
...

显示第几条到第几条数据的关键实现在在limit(),limit()函数返回于类似这样的字符串:limit 20,20。这是SQL语句的一部分。注意上面返回数据的调用:
$BugList = @array_reverse(bugGetInfo($_COOKIE["CustomFields"], $_SESSION["QueryCondition"].$_SESSION["OrderCondition"].$MyPage->limit(), $BugConfig["QueryTitleLength"], true));

这个参数:$_SESSION["QueryCondition"].$_SESSION["OrderCondition"].$MyPage->limit()是SQL语句的查询条件。就是用$MyPage->limit的控制需要返回第几条到第几条数据。

就是这样了,不知我说明白了没有?
最后编辑, 05-10-14 09:18
回帖
2005-10-20 21:11:22
#2
leeyupeng
访问次数 : 14
注册日期 : 05-05-10 09:57
上次访问 : 09-10-29 21:05
嗯,看懂:)
回帖