一个分页类

<?

class machine_page{
var $title_count=0;//帖子总数
var $title_rows=10;//每页显示多少行
var $show_page=7;//每页显示多少个跳转页号
var $page_count=0;//共有多少页
var $current_page=1;//当前页
var $start=0;//开始记录
var $start_page=1;//开始页号
var $page_arr=array();//开始记录

  function machine_page($count,$current_page=1,$title_rows=10,$show_page=7){//构造函数

    $this->title_count=(int)$count;//获取传入的帖子总数

    $this->current_page=(int)$current_page;//获取当前页

    $this->title_rows=(int)$title_rows;//显示多少行

    $this->show_page=$show_page;//每页显示多少个跳转页号

    $this->count_page();//调用计算页数的方法

    $this->return_page_arr();//调用返回跳转页号的方法

  }


  function count_page(){//计算页数

    //计算共有多少页
    @$this->page_count=ceil($this->title_count/$this->title_rows);

    //防止$this->title_rows意外等于0时的错误
    $this->page_count=(int)$this->page_count;

    //如果当前页大于最大页数,则使其等于最大页数;如果当前页小于1,则使其等于1
    if ($this->current_page>$this->page_count)$this->current_page=$this->page_count;
    if ($this->current_page<1)$this->current_page=1;

    //计算查询的开始记录数
    $this->start=($this->current_page-1)*$this->title_rows;

  }


  function return_page_arr(){//返回页面跳转页号的函数

    //用当前页除以显示页数得到当前是第几“大页”
    $start_s=floor($this->current_page/$this->show_page);

    /*
      如果当前页号正好整除显示页数,则应该对$start_s减一,因为设想一下,如果当前是第7页
      显示页数也是7,则$start_s=1,也就是说已经到了第二“大页”了,而实际上它应该还是在
      第一“大页”
    */

    if ($this->current_page%$this->show_page==0)$start_s--;

    //计算开始页号,算法是当前“大页”*显示页数+1;例如0*7+1=1,1*7+1=8,2*7+1=15
    $this->start_page=$start_s*$this->show_page+1;

    //开始循环计算当前大页中的小页号
    for ($i=0;$i<$this->show_page;$i++){

      //如果下一个页号已经超出了总页数,则说明应该停止了
      if ($this->start_page+$i>$this->page_count)break;

      //将页号记录在$this->page_arr数组中
      $this->page_arr[]=$this->start_page+$i;

    }


  }


}


?>

操作方法
一、简单操作:
    1、//取得当前页号
       $current_page=(int)$_GET['page'];
    2、//统计帖子数
       $title_count=…………//这里大家可以采用自己的方法来统计
    3、//使用分页类
       $page_obj=new page($title_count$current_page);

二、完全操作
    1、//取得当前页号
       $current_page=(int)$_GET['page'];
    2、//统计帖子数
       $title_count=…………//这里大家可以采用自己的方法来统计
    3、//使用分页类
       $page_obj=new machine_page($title_count$current_page,10,7);

大家注意到,我只是在加了两个参数10,7这两个表示什么呢?
10表示每页显示10行,7表示显示7个跳转页号。
什么是跳转页号呢?例如,当你在查看1-7页的时候,将显示1 2 3 4 5 6 7
当你在查看第8-14页的时候将显示8 9 10 11 12 13 14

下面说这个类的使用:
这个类将返回这些属性
1:$page_obj->start         查询的起始位置,例:select … limit $page_obj->start,10

2:$page_obj->title_rows    查询返回的行数,例:limit $page_obj->start,$page_obj->title_rows

4:$page_obj->page_arr      代表页面跳转页号的数组,例如1234567(注意,它是一个数组)

5:$page_obj->page_count    代表共有多少页

6:$page_obj->title_count   代表共有多少帖

7:$page_obj->start_page    代表跳转页的开始页号,例如当前是1-7,就为1,如果是8-14,就为8
                           这个是用来翻“大页”的,例如当前如果是第4页,那么下一个大页的
                           开始页就应该是8,如果当前是第9页,那么下一个大页的开始页就是15
                           而上一个开始页就为1,那么我们可以通过这样来实现大页之间的跳转。
                           假设现在我们在第9页,那么$page_obj->start_page的值就为8如果我
                           想跳到上一个大页的末尾(即7),那么就是$page_obj->start_page-1
                           如果我想跳到下一个大页的开始(即15),
                           那么就是$page_obj->start_page+$page_obj->show_page
                           这样解释大家应该明白了吧?  

版权声明:
作者:Kiyo
链接:https://www.wkiyo.cn/html/2008-01/i475.html
来源:Kiyo's space
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>