下面是一段PHP分页代码,可以正常运行,$rst = mysql_query($qry) or die(mysql_error());
$numrows = mysql_num_rows($rst);
$qry .= " limit $starting, $recpage"; //$starting开始数,$recpage每页几条记录
$this->result = mysql_query($qry) or die(mysql_error());
$next = $starting+$recpage;
$var = ((intval($numrows/$recpage))-1)*$recpage;
$page_showing = intval($starting/$recpage)+1;
$total_page = ceil($numrows/$recpage); $norepeat = 4;
$j = 1;
for($i=$page_showing; $i>1; $i--){
$fpreviousPage = $i-1;
$pagee = ceil($fpreviousPage*$recpage)-$recpage;
$anch = "<a href='#' >$fpreviousPage</a>".$anch;
if($j == $norepeat) break;
$j++;
}
$anc .= $anch; // 前几条 $anc .= $page_showing; //当前页码 $j = 1;
for($i=$page_showing; $i<$total_page; $i++){
$fnextPage = $i+1;
$pagee = ceil($fnextPage*$recpage)-$recpage;
$anc .= "<a href='#' >$fnextPage</a>"; //后几条
if($j==$norepeat) break;
$j++;
}
但是显示的规律如下,只能显示当前页面的前后四个页码。(1) | 2 | 3 | 4 | 5 // (1) 是当前页码
2 | 3 | 4 | 5 | (6) | 7 | 8 | 9 | 10 // (6) 是当前页码
12 | 13 | 14 | 15 | (16) // (16)是当前页码, 最后一页如何增加判断,使页码小于5时,同样可以显示9个页码?下面是我要的效果:(1) | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 // (1) 是当前页码,显示9个页码
1 | (2) | 3 | 4 | 5 | 6 | 7 | 8 | 9 // (2) 是当前页码,显示9个页码
2 | 3 | 4 | 5 | (6) | 7 | 8 | 9 | 10 // (6) 是当前页码,这里和前面的一样
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | (16) // (16) 是当前页码, 最后一页,显示9个页码同时还应该注意当页码少于9的情况。(比如只有6页,这样分页只显示6.)
谢谢。
$numrows = mysql_num_rows($rst);
$qry .= " limit $starting, $recpage"; //$starting开始数,$recpage每页几条记录
$this->result = mysql_query($qry) or die(mysql_error());
$next = $starting+$recpage;
$var = ((intval($numrows/$recpage))-1)*$recpage;
$page_showing = intval($starting/$recpage)+1;
$total_page = ceil($numrows/$recpage); $norepeat = 4;
$j = 1;
for($i=$page_showing; $i>1; $i--){
$fpreviousPage = $i-1;
$pagee = ceil($fpreviousPage*$recpage)-$recpage;
$anch = "<a href='#' >$fpreviousPage</a>".$anch;
if($j == $norepeat) break;
$j++;
}
$anc .= $anch; // 前几条 $anc .= $page_showing; //当前页码 $j = 1;
for($i=$page_showing; $i<$total_page; $i++){
$fnextPage = $i+1;
$pagee = ceil($fnextPage*$recpage)-$recpage;
$anc .= "<a href='#' >$fnextPage</a>"; //后几条
if($j==$norepeat) break;
$j++;
}
但是显示的规律如下,只能显示当前页面的前后四个页码。(1) | 2 | 3 | 4 | 5 // (1) 是当前页码
2 | 3 | 4 | 5 | (6) | 7 | 8 | 9 | 10 // (6) 是当前页码
12 | 13 | 14 | 15 | (16) // (16)是当前页码, 最后一页如何增加判断,使页码小于5时,同样可以显示9个页码?下面是我要的效果:(1) | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 // (1) 是当前页码,显示9个页码
1 | (2) | 3 | 4 | 5 | 6 | 7 | 8 | 9 // (2) 是当前页码,显示9个页码
2 | 3 | 4 | 5 | (6) | 7 | 8 | 9 | 10 // (6) 是当前页码,这里和前面的一样
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | (16) // (16) 是当前页码, 最后一页,显示9个页码同时还应该注意当页码少于9的情况。(比如只有6页,这样分页只显示6.)
谢谢。
/**
* $count 总页数
* $page 当前页号
* $num 显示的页码数
**/
function pagebar($count, $page, $num) {
$num = min($count, $num); //处理显示的页码数大于总页数的情况
if($page > $count || $page < 1) return; //处理非法页号的情况
$end = $page + floor($num/2) <= $count ? $page + floor($num/2) : $count; //计算结束页号
$start = $end - $num + 1; //计算开始页号
if($start < 1) { //处理开始页号小于1的情况
$end -= $start - 1;
$start = 1;
}
for($i=$start; $i<=$end; $i++) { //输出分页条,请自行添加链接样式
if($i == $page) echo "[$i]";
else echo " $i ";
}
echo "($page)<br />";
}for($i=1; $i<=50; $i++)
pagebar(50, $i, 9);
效果
[1] 2 3 4 5 6 7 8 9 (1)
1 [2] 3 4 5 6 7 8 9 (2)
1 2 [3] 4 5 6 7 8 9 (3)
1 2 3 [4] 5 6 7 8 9 (4)
1 2 3 4 [5] 6 7 8 9 (5)
2 3 4 5 [6] 7 8 9 10 (6)
3 4 5 6 [7] 8 9 10 11 (7)
4 5 6 7 [8] 9 10 11 12 (8)
5 6 7 8 [9] 10 11 12 13 (9)
6 7 8 9 [10] 11 12 13 14 (10)
7 8 9 10 [11] 12 13 14 15 (11)
8 9 10 11 [12] 13 14 15 16 (12)
9 10 11 12 [13] 14 15 16 17 (13)
10 11 12 13 [14] 15 16 17 18 (14)
11 12 13 14 [15] 16 17 18 19 (15)
12 13 14 15 [16] 17 18 19 20 (16)
13 14 15 16 [17] 18 19 20 21 (17)
14 15 16 17 [18] 19 20 21 22 (18)
15 16 17 18 [19] 20 21 22 23 (19)
16 17 18 19 [20] 21 22 23 24 (20)
17 18 19 20 [21] 22 23 24 25 (21)
18 19 20 21 [22] 23 24 25 26 (22)
19 20 21 22 [23] 24 25 26 27 (23)
20 21 22 23 [24] 25 26 27 28 (24)
21 22 23 24 [25] 26 27 28 29 (25)
22 23 24 25 [26] 27 28 29 30 (26)
23 24 25 26 [27] 28 29 30 31 (27)
24 25 26 27 [28] 29 30 31 32 (28)
25 26 27 28 [29] 30 31 32 33 (29)
26 27 28 29 [30] 31 32 33 34 (30)
27 28 29 30 [31] 32 33 34 35 (31)
28 29 30 31 [32] 33 34 35 36 (32)
29 30 31 32 [33] 34 35 36 37 (33)
30 31 32 33 [34] 35 36 37 38 (34)
31 32 33 34 [35] 36 37 38 39 (35)
32 33 34 35 [36] 37 38 39 40 (36)
33 34 35 36 [37] 38 39 40 41 (37)
34 35 36 37 [38] 39 40 41 42 (38)
35 36 37 38 [39] 40 41 42 43 (39)
36 37 38 39 [40] 41 42 43 44 (40)
37 38 39 40 [41] 42 43 44 45 (41)
38 39 40 41 [42] 43 44 45 46 (42)
39 40 41 42 [43] 44 45 46 47 (43)
40 41 42 43 [44] 45 46 47 48 (44)
41 42 43 44 [45] 46 47 48 49 (45)
42 43 44 45 [46] 47 48 49 50 (46)
42 43 44 45 46 [47] 48 49 50 (47)
42 43 44 45 46 47 [48] 49 50 (48)
42 43 44 45 46 47 48 [49] 50 (49)
42 43 44 45 46 47 48 49 [50](50)
//翻页程序,分页
//翻页变量定义
global $page,$firstcount,$pagenav,$_SERVER,$displaypg,$grouppage;
$sqltemp="";//查询条件
$displaypg=10;//每页显示记录数,一页显示10条记录
$grouppage=9;//每组显示页数,你的9页可以在这里设置
$mainsql="select count(*) as rectotal from dian where zhungtai=2 ".$sqltemp;
$fsql->query($mainsql);
if($fsql->next_record()){
$total=$fsql->f('rectotal');//总记录数
}else{
$total=0;
}
$lastpg=nx_page4($total,$displaypg);
$pagestr=$firstcount.",".$displaypg;
//从$firstcount开始显示$displaypg条
//$pagenav,翻页条,插入到需要显示翻页的地方
//你自己的主程序
$sql="select dianid,dname2 from dian where zhungtai=2 ".$sqltemp." order by uptime desc limit ".$pagestr;
$fsql->query($sql);
while($fsql->next_record()){
$dianid_cur=$fsql->f('dianid');
}
echo $pagenav;//翻页函数
function nx_page4($total,$displaypg=20){
global $page,$firstcount,$pagenav,$_SERVER,$grouppage; if($page=="")$page=1;
$url=request_uri();
$parse_url=parse_url($url);
$url_query=$parse_url["query"];
if($url_query){
$url_query=ereg_replace("(^|&)page=".$page,"",$url_query);
$url=str_replace($parse_url["query"],$url_query,$url);
if($url_query) $url.="&page"; else $url.="page";
}else {
$url.="?page";
}
$lastpg=ceil($total/$displaypg); //最后页,也是总页数
$page=min($lastpg,$page);
$prepg=$page-1; //上一页
$nextpg=($page==$lastpg ? 0 : $page+1); //下一页
$firstcount=($page-1)*$displaypg;
if($firstcount<0){
$firstcount=0;
} //分组显示,$grouppage:每组显示的页数
if($lastpg<=$grouppage){
$group_firstpage=1;//分组显示的第一页
$group_lastpage=$grouppage;//分组显示的最后一页
$pregroup=0;//上一组
$nextgroup=$grouppage+1;
}else{
$group_firstpage=(ceil($page/$grouppage)-1)*$grouppage+1;
$group_lastpage=$group_firstpage+$grouppage-1;
$pregroup=$group_firstpage-$grouppage;//上一组
$nextgroup=$group_firstpage+$grouppage;
}
$group_lastpage=min($lastpg,$group_lastpage); //开始分页导航条代码:
$pagenav="<label style='font-size:13px;color:#828282;height:30px;padding-top:10px'>";
if($lastpg<$grouppage){
$pagenav.="页码:";
} if($lastpg<=1){
//如果只有一页则跳出函数:
$pagenav="";
return false;
/*
if($total>0){
$pagenav.="显示第<B>".($total?($firstcount+1):0)."</B>—<B>".min($firstcount+$displaypg,$total)."</B>条 共".$total."条";
return false;
}else{
$pagenav="";
return false;
}
*/
}else{
if($pregroup>0){
$pagenav.=" <a href='".$url."=1'><img src='/code/images/2arrow_l_on.gif' border=0 title='首页'></a> ";
$pagenav.=" <a href='".$url."=".$pregroup."'><img src='/code/images/1arrow_l_on.gif' border=0 title='前".$grouppage."页'></a>";
//else $pagenav.=" <img src='/code/images/1arrow_l_off.gif' border=0 title='上一组'> ";
}
//列出本组的页码:
//$pagenav.=" ";
for($i=$group_firstpage;$i<=$group_lastpage;$i++){
if($i==$page)
$pagenav.=" <FONT COLOR='#000000'><B>".$i."</B></FONT>";
else
$pagenav.=" <A HREF='".$url."=".$i."'><FONT COLOR='#0000FF'>[".$i."]</A></FONT>";
}
if($nextgroup<=$lastpg){
$pagenav.=" <a href='".$url."=".$nextgroup."'><img src='/code/images/1arrow_r_on.gif' border=0 title='后".$grouppage."页'></a> ";
//$pagenav.=" <a href='".$url."=".$lastpg."'><img src='/code/images/2arrow_r_on.gif' border=0 title='末页'></a>";
}
//$pagenav.=" 共".$lastpg."页(".$displaypg."条/页)";
if($total<101){
$pagenav.=" 共<B>".$total."</B>家";
}
} $pagenav.="</label>"; return $lastpg;
}
function request_uri()
{
if (isset($_SERVER['REQUEST_URI']))
{
$uri = $_SERVER['REQUEST_URI'];
}
else{
if (isset($_SERVER['argv'])){
if($_SERVER['argv'][0]!=""){
$uri = $_SERVER['PHP_SELF'].'?'.$_SERVER['argv'][0];
}else{
$uri = $_SERVER['PHP_SELF'];
}
}else{
if($_SERVER['QUERY_STRING']!=""){
$uri = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
}else{
$uri = $_SERVER['PHP_SELF'];
}
}
}
return $uri;
}
当前页和最大页做比较几种不同的情况
生成一个PAGINATION的HTML 然后前台打印出这个HTML。