一种分页的实现

以下代码是一种分页的实现。分别是文件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 <html>
  2 <head>
  3     <meta http-equiv="Content-type" content="text/html;charset=utf-8">
  4     <link href="page.css" rel="stylesheet" type="text/css" />
  5 </head>
  6 <body>
  7 <?php
  8     //1传入页码
  9     $page = $_GET[‘p‘];
 10     $pageSize = 10;//每页最多显示项目数目
 11     //2根据页码提取数据,配置mysql
 12     $host = ‘localhost‘;
 13     $username = ‘root‘;
 14     $password = ‘‘;
 15     $db = ‘bookstore‘;
 16     $conn = mysql_connect($host, $username, $password);
 17     if(!$conn){
 18         echo ‘数据库连接失败‘;
 19         exit;
 20     }
 21     mysql_select_db($db);
 22     mysql_query(‘SET NAMES UTF8‘);
 23     //3取出数据并生成表格
 24     $sql = "SELECT * FROM books LIMIT ".(($page-1)*$pageSize).",$pageSize";
 25     $res = mysql_query($sql);
 26     echo "<div class=‘content‘>";
 27     echo ‘<table border=1 cellspacing=0 width=40%>‘;
 28     echo ‘<tr><td>ID</td><td>NAME</td></tr>‘;
 29     while($row = mysql_fetch_assoc($res)){
 30         echo ‘<tr>‘;
 31         echo "<td>{$row[‘id‘]}</td>";
 32         echo "<td>{$row[‘name‘]}</td>";
 33         echo ‘</tr>‘;
 34     }
 35     echo ‘</table></div>‘;
 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 = "<div class=‘page‘>";
 48     if($page > 1){
 49         $page_banner .= "<a href=‘".$_SERVER[‘PHP_SELF‘]."?p=1‘>首页</a>";
 50         $page_banner .= "<a href=‘".$_SERVER[‘PHP_SELF‘]."?p=".($page - 1)."‘><上一页</a>";
 51     }else{
 52         $page_banner .= "<span class=‘display‘>首页</span>";
 53         $page_banner .= "<span class=‘display‘><上一页</span>";
 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 .= "<span class=‘current‘>".($i)."</span>";
 80         }else{
 81             $page_banner .= "<a href=‘".$_SERVER[‘PHP_SELF‘]."?p=".($i)."‘>".($i)."</a>";
 82         }
 83     }
 84     //8分页条目尾部显示,根据页码显示相应
 85     if($end <= $totalPage){
 86         $page_banner .= ‘...‘;
 87     }
 88     if($page < $totalPage){
 89         $page_banner .= "<a href=‘".$_SERVER[‘PHP_SELF‘]."?p=".($page + 1)."‘>下一页></a>";
 90         $page_banner .= "<a href=‘".$_SERVER[‘PHP_SELF‘]."?p=".($totalPage)."‘>尾页</a>";
 91     }else{
 92         $page_banner .= "<span class=‘display‘>尾页</span>";
 93         $page_banner .= "<span class=‘display‘>下一页></span>";
 94     }
 95     //9跳转
 96     $page_banner .= "共".$totalPage."页";
 97     $page_banner .= "<form action=‘page.php‘ method=‘get‘>";
 98     $page_banner .= "跳转到第<input type=‘text‘ size=‘2‘ name=‘p‘ value=‘".$page."‘ />页";
 99     $page_banner .= "<input type=‘submit‘ value=‘确定‘ />";
100     $page_banner .= "</form>";
101     $page_banner .= "</div>";
102     echo $page_banner;
103 ?>
104 </body>
105 </html>

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 }

时间: 2024-12-16 07:23:02

一种分页的实现的相关文章

SQL Server 中的三种分页方式

USE tempdb GO SET NOCOUNT ON --创建表结构 IF OBJECT_ID(N'ClassB', N'U') IS NOT NULL DROP TABLE ClassB GO CREATE TABLE ClassB(ID INT PRIMARY KEY, Name VARCHAR(16), CreateDate DATETIME, AID INT, Status INT) CREATE INDEX IDX_CreateDate ON ClassB(CreateDate)

js的几种分页

1. function lastStart(pageIndex,size){ for(i=pageIndex-1;i>=0;i--){ if(i%size==0){ return i+1; } } } function firstEnd(pageIndex,totalPage,size){ for(i=pageIndex;i<totalPage;i++){ if(i%size==0){ return i; } } return totalPage; } function drawPage(to

关于php,mysql,html的数字分页和文本分页的两种分页样式供大家参考

请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 首先进行样式展示希望对大家有所帮助,也希望大家给出意见和建议: 第一种:数字分页 第二种:为文本分页 php分页函数(我写在下面引入的common.inc.php公共文件中): /* *_page()分页的相关参数 *@param int $_pagesize 每页存有几个好友 *@param $_sql 获取所有字段 *

sql2种分页

declare @time datetimedeclare @ms intset @time= getdate()select ID,name from (select row_number() over(order by ID) as rowNum,* from dbo.testb) as t where rowNum between 500000 and 500100set @ms=datediff(ms,@time,getdate())print @ms select top 100 *

Hibeernate中的两种分页方式

1. return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException { Criteria c = s.createCriteria(AskOnline.class); c.add(Restrictions.eq("boardid", new Long(bid))); c.setFirs

sqlserver的四种分页方式

第一种:ROW_NUMBER() OVER()方式 select * from ( select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId from ArtistModels ) as b where RowId between 10 and 20 ---where RowId BETWEEN 当前页数-1*条数 and 页数*条数--- 执行结果是: 第二种方式:offset fetch next方式(SQL2012以上的版本才支持:推

ASP.NET中的几种分页

1.通过DataGrid控件实现分页 ASP.NET中的DataGrid控件自带了分页功能,当绑定了DataGrid的数据源之后,须要对DataGrid控件进行一些设置: 左击控件右上角的小箭头→属性生成器: 选择左边的[分页]选项卡 选中[同意分页].[页大小]表示一页显示多少条数据:导航button的[位置]有顶.底.上下型三种选择.[模式]有页码和"上一页.下一页button".假设选择了页码模式.[数值button]表示最多显示的button数量,假设选择了还有一种模式,&qu

lucene的两种分页操作

基于lucene的分页有两种: lucene3.5之前分页提供的方式为再查询方式(每次查询全部记录,然后取其中部分记录,这种方式用的最多),lucene官方的解释:由于我们的速度足够快.处理海量数据时,内存容易内存溢出.    lucene3.5以后提供一个searchAfter,这个是在特大数据量采用(亿级数据量),速度相对慢一点,像google搜索图片的时候,点击更多,然后再出来一批.这种方式就是把数据保存在缓存里面.然后再去取. 以下是再查询部分代码: /** * 这就是先查询所有的数据,

三种分页的实现方式

(1)每次取查询结果的所有数据,然后根据页面显示指定的记录 (2)根据页面只取一页的数据,然后显示这一页,这里要构造sql语句 (3)取一定页数的数据,就是前两种的折中 实现分页的步骤: 1.创建一个用于封装分页相关属性及操作的类 2.从页面增加分页导航条的功能 3.实现分页查询功能,从页面请求->Servlet->DAO的实现