以下代码是一种分页的实现。分别是文件page.php和page.css。
分页的纠结点在于分页条中省略号的显示。
实现的基本逻辑是:
1,接收浏览器端传过来的想要显示的页码数 $page。
$page = $_GET['p']。
2,根据页码数 $page 以及固定的每页显示数 $pageSize 从数据库中取数据。
$sql = "SELECT * FROM books LIMIT ".(($page-1)*$pageSize).",10";
3,填充表格。
4,页码条头部显示。
5,页码条中间页码开始$atart及结束$end的具体求值。
$showPage = 5; 为最大显示页码数
$offset = ($showPage-1)/2; 为偏移量
$sql = 'SELECT count(*) FROM books';
$totalPage 为总的显示页码数
(1)当$totalPage <= $showPage时,1~1+$totalPage。
(2)当$totalPage > $showPage时,
1~(1+$showPage)
或者 ($page-offset)~($page+$offset+1)
或者($totalPage-$showPage+1)~($totalPage+1)
6,根据 5 中得到的$start和$end显示中间的页码数。
7,6 的同时,还要加上相应的省略号。
(1)$start > 1 时,前加省略号。
(2)$end <= $totalPage 时,后加省略号。
8,跳转的设置。用form表单的方式。
9,相关样式的设置。
page.php
1 2 3 4 5 6 7 "; 27 echo '
'; 28 echo ' ID | NAME |
'; 29 while($row = mysql_fetch_assoc($res)){ 30 echo ' '; 31 echo " { $row['id']} | "; 32 echo " { $row['name']} | "; 33 echo '
'; 34 } 35 echo '
'; 36 37 //4分页条参数设置 38 $showPage = 5;//同时最多可以显示页码数量 39 $offset = ($showPage-1)/2;//以当前页码为中心的最多偏移量 40 $sql = 'SELECT count(*) FROM books'; 41 $arr = mysql_fetch_array(mysql_query($sql)); 42 $totalPage = ceil($arr[0]/$pageSize);//可以显示的总页数 43 mysql_free_result($res); 44 mysql_close($conn); 45 $db = 'bookstore'; 46 //5分页条目首部显示 47 $page_banner = "
"; 48 if($page > 1){ 49 $page_banner .= "
首页"; 50 $page_banner .= "
<上一页>上一页>"; 51 }else{ 52 $page_banner .= "
首页"; 53 $page_banner .= "
<上一页>上一页>"; 54 } 55 //6分页条目中部显示,先找出开头结尾的页码 56 if($totalPage > $showPage){ 57 //显示部分页码,带了省略号,此处以5页为例 58 if(($page - $offset) <= 1){
//显示前5页,后面加省略号 59 $start = 1; 60 $end = $start + $showPage; 61 } elseif (($page + $offset) >= $totalPage) {
//显示最后5页,前边加省略号 62 $start = $totalPage - $showPage + 1; 63 $end = $totalPage + 1; 64 } else{
//前后都有省略号 65 $start = $page - $offset; 66 $end = $page + $offset + 1; 67 } 68 } else { 69 //显示所有可以显示的页码 70 $start = 1; 71 $end = $start + $totalPage; 72 } 73 if($start > 1){ 74 $page_banner .= '...'; 75 } 76 //7分页条目中部显示,根据页码显示相应 77 for($i = $start; $i < $end; $i++){ 78 if($i == $page){ 79 $page_banner .= "
".($i).""; 80 }else{ 81 $page_banner .= "
".($i).""; 82 } 83 } 84 //8分页条目尾部显示,根据页码显示相应 85 if($end <= $totalPage){ 86 $page_banner .= '...'; 87 } 88 if($page < $totalPage){ 89 $page_banner .= "
下一页>"; 90 $page_banner .= "
尾页"; 91 }else{ 92 $page_banner .= "
尾页"; 93 $page_banner .= "
下一页>"; 94 } 95 //9跳转 96 $page_banner .= "共".$totalPage."页"; 97 $page_banner .= "
";101 $page_banner .= "
";102 echo $page_banner;103 ?>104 105
View Code page.css
1 body{ 2 text-align: center; 3 font-family: verdana; 4 font-size: 12px; 5 width:100%; 6 } 7 table{ 8 margin: 0 auto; 9 text-align:center;10 }11 div.page form{12 display: inline;13 }14 div.content{15 height:300px;16 }17 div.page a{18 border: 1px solid #aaaadd;19 text-decoration: none;20 padding: 2px 5px 2px 5px;21 margin: 2px; 22 }23 div.page span.current{24 border: 1px solid #000099;25 background-color: #000099;26 text-decoration: none;27 padding: 4px 6px 4px 6px;28 margin: 2px; 29 color: #fff;30 }31 div.page span.display{32 border: 1px solid #eee;33 text-decoration: none;34 padding: 2px 5px 2px 5px;35 margin: 2px;36 color:#ddd;37 }
View Code