首页 > PHP, 建站教程, 我的原创 > PHP分页函数代码实例说明

PHP分页函数代码实例说明

2009年7月27日 阅读数:1,794 views

  在PHP网站开发与建设过程中,分页显示相关数据是我们经常遇到的,而PHP+Mysql的分页显示技术有不同的解决方案,今天和大家分享我自己写的PHP分页代码,数据库采用Mysql。

  此PHP分页代码主要由以下几个PHP分页函数组成:

  分页页数计算函数(getTotalpages)、分页参数设定函数(setPagesPar)、Mysql分页记录函数(turnPages)、分页显示样式函数(showTurnPages)

  PHP分页代码显示效果

  1 2 3 4 5 6 7 8 9 10 >  >>

  <<  <10 11 12 13 14 15 16 17 18 19 > >>

  <<  <19 … … … … … … … … … … …> >>

  startpage:1、10、19、28….

  <<:首页  >>:尾页  <:前十页  >:后十页

  需要预先设定的PHP分页参数说明

  $pageSize:页面记录数,即每个页面显示多少条记录

  $showpagenum:一次显示多少页码数

  $url:链接的具体页面地址,建议采用相对地址

  PHP分页页数计算函数代码实例

  功能:计算需要显示的总页数

  算法:总记录数/每个页面显示的记录数

1
2
3
4
function getTotalpages($sql,$pageSize)
{
    return ceil(@mysql_num_rows(query_error($sql))/$pageSize);
}

:query_error($sql)函数相当于mysql_query()函数,ceil函数用来取整数。
 
  PHP分页参数设定函数代码实例

  功能:设定分页函数所需要的相关参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
function setPagesPar($page,$totalpages,$startpage,$showpagenum,$direct)
{
    if($page>$totalpages ||$page <=0)
    {
        $page = 1;
        $startpage = 1;
    }

    $tail = 1;
    $startpagecode = array('');
    $startpagecode[0] = 1;

    for($i=1;$i<=(($totalpages/$showpagenum));$i++)
    {
        $tail = $tail + ($showpagenum-1);
        $startpagecode[$i] = $tail;
    }

    if(!in_array($startpage,$startpagecode))
    {
        $startpage = $startpagecode[0];
        $page = 1;
    }

    if(!($page%$showpagenum))
    {
        if($startpage == 1)
          $startpage = $showpagenum;
        else
        {
          if($page == $startpage)
          {
            if($direct == 'next' || $direct == 'prev'|| $direct == 'tail')
              $startpage = $startpage;
          else
                $startpage = $startpage - ($showpagenum-1);
          }
        }

        $info['page'] = $page;
        $info['startpage'] = $startpage;
        $info['tail'] = $tail;
        return $info;
    }

    if($page%$showpagenum && $startpage!=1)
    {
        if($page == $startpage)
        {
            if($direct == 'next' || $direct == 'prev')
                $startpage = $startpage;
            else
                $startpage = $startpage - ($showpagenum-1);
        }
        else
        {
            if($page == ($startpage+($showpagenum-1)))
                $startpage = $startpage + ($showpagenum-1);
        }

        $info['page'] = $page;
        $info['startpage'] = $startpage;
        $info['tail'] = $tail;
        return $info;
    }

    $info['page'] = $page;
    $info['startpage'] = $startpage;
    $info['tail'] = $tail;
    return $info;
}

注释:此PHP分页函数主要用来设定这些分页参数:当前页($page);下一个$showpagenum的起始页($startpage),即如之前显示效果所示的1,10,19,28…,我在应用这个PHP分页函数时设定$showpagenum = 10;最后十页的起始页($tail)

第9~23行:获取每隔$showpagenum页的起始页数以及最后$showpagenum页的起始页($tail),并做一定的预判,如非法输入则将$startpage和当前页初始化。

第25~65行:主要用来判断分页显示以$startpage为基点的前十分页还是后十分页

  Mysql分页记录函数代码实例

  功能:根据Mysql的SQL语句获取对应的Mysql分页记录集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function turnPages($currentPage,$pageSize,$sql)
{
    if(!is_numeric($currentPage) || $currentPage<=0)
        $currentPage = 1;
    if(!is_numeric($pageSize) || $pageSize<=0)
        $pageSize = 10;
   
    $totalPages = getTotalpages($sql,$pageSize);
   
    if($currentPage>$totalPages && $totalPages>0)
        $currentPage = $totalPages;

    if($currentPage == 1)
        $start = 0;
    else
        $start = ($currentPage-1) * $pageSize;

    $sql = $sql.$start.",".$pageSize;

    return query_error($sql);
}

注释:此PHP分页函数主要用到了Mysql语句中的limit参数来实现获取指定分页中的相关记录。其通过计算Mysql数据库中相关记录的起始位置来获得指定数量($pageSize)的的记录。
 
  PHP分页显示样式函数代码实例

  功能:输出PHP分页代码显示效果,具体样式可以根据网站的需要自行修改相应样式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function showTurnPages($startpage,$showpagenum,$totalpages,$tail,$url,$condition)
{
    $newcon = "&";
    if(count($condition))
    {
        foreach($condition as $key =>$value)
        {
            if(strcmp("page", $key) == 0 || strcmp("startpage", $key) == 0 ) {     
            continue;
            }
            $newcon = $newcon.$key."=".$value."&";
        }
    }
    echo "<div>";
    echo "<ul>";
    if($startpage>=$showpagenum)
    {
        echo "<li><a href=\"".$url."?page=1&startpage=1".$newcon."\">&lt;&lt;</a></li>";
        echo "<li><a href=\"".$url."?page=".($startpage-($showpagenum-1))."&startpage=".($startpage-($showpagenum-1))."&direct=prev".$newcon."\">&lt;</a></li>";
    }
           
    $turnpagenum = $startpage + $showpagenum;
               
    for($i=$startpage;$i< $turnpagenum;$i++)
    {  
        if($i>$totalpages) break;

        echo "<li><a href=\"".$url."?page=".$i."&startpage=".$startpage.$newcon."\">".$i."</a></li>";
    }

    if(($startpage+($showpagenum-1)) < $totalpages)
    {
        echo "<li><a href=\"".$url."?page=".($startpage+($showpagenum-1))."&startpage=".($startpage+($showpagenum-1))."&direct=next".$newcon."\">&gt;</a></li>";
        echo "<li><a href=\"".$url."?page=".$tail."&startpage=".$tail."&direct=tail".$newcon."\">&gt;&gt;</a></li>";
    }
    echo "</ul></div>";
    echo "</div>";
}

注释:此PHP分页函数的功能主要是实现之前所说的PHP分页代码显示效果,分页函数的参数$condition是个数组,主要用来附带一些可能用到的条件查询,比如将此分页函数应用在查询页面。你可以将其理解为$_GET数组。

  完整的调用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//include("上述函数文件")

$pageSize = 10;

$totalpages = getTotalpages($sql,$pageSize);

$showpagenum = 10;

$url = "leapsoulcn.php";

if(!isset($_GET['page']) || !is_numeric($_GET['page']) || $_GET['page']<=0)
{
    $page = 1;
    $startpage = 1;
}

if(!isset($_GET['startpage']) || !is_numeric($_GET['startpage']) || $_GET['startpage']<$showpagenum)
{
    $startpage = 1;
}

if(!isset($_GET['direct']) || (strcmp($_GET['direct'],"next") && strcmp($_GET['direct'],"prev") && strcmp($_GET['direct'],"tail")))
    $direct = "";

$pagePara = setPagesPar($page,$totalpages,$startpage,$showpagenum,$direct);

$page = $pagePara['page'];
$startpage = $pagePara['startpage'];
$tail = $pagePara['tail'];
       
$result = turnPages($page,$pageSize,$sql);

//在html页面中显示分页页面的位置调用PHP分页显示样式函数
showTurnPages($startpage,$showpagenum,$totalpages,$tail,$url,$_GET);

总结
  以上就是PHP分页函数代码的说明和使用方式,其实分页技术的实现原理主要在于Mysql数据库记录集中相应位置的算法。搞清楚了也就容易很多,当然如果在设计数据库时考虑到分页的问题,可能方法更简单。

  PHP网站开发教程-leapsoul.cn版权所有,转载时请以链接形式注明原始出处及本声明,谢谢。

作者: david 分类: PHP, 建站教程, 我的原创 标签:

  1. 2009年7月27日17:24 | #1

    分页,开始接触PHP的时候研究过,哈哈,顶~~

  2. 2009年7月27日20:02 | #2

    嗯,这个要认真学习一下啊

  3. Jason
    2009年8月14日11:08 | #3

    思路值得学习,不过代码写的太烂了

  4. 2009年8月14日13:21 | #4

    呵呵,很久以前写的代码

  5. 2009年12月19日07:51 | #5

    Dear Author http://www.leapsoul.cn !
    Good question

  6. 2009年12月25日23:12 | #6

    I want to quote your post in my blog. It can?
    And you et an account on Twitter?

  7. 2009年12月26日09:59 | #7

    Sure,As long as you specify source from http://www.leapsoul.cn
    I am sorry, I do not know why my twitter account can’t be accessed.Thank you for your support.

  1. 本文目前尚无任何 trackbacks 和 pingbacks.