class dividepage{ //分页类 private $total ; //要显示的总记录数 private $url ; //请求的url地址 private $displaypg ; //每页显示的记录数,默认为每页显示10条记录 private $page ; //当前页码 private $lastpg ; //总页数,即最后一页的页码 private $prepg ; //前一页 private $nextpg ; //后一页 private $firstcount ; //记录条数开始的序号从0开始 private $startd ; //记录条数开始的记录号. private $stopd ; //记录条数结束的记录号. //构造函数 public function __construct( $url , $total , $displaypg ){ $this ->url = $url ; //请求的url $this ->total = $total ; //总记录数 //if($displaypg == '') $this ->displaypg = $displaypg ; //每页显示的记录数 $this ->initdividepage(); //初始化分页类 //echo ','.$this->displaypg; } //初始化分页类 private function initdividepage(){ //分析url $parse_url = parse_url ( $this ->url); //将url解释为有固定键值对的数组 $url_query = $parse_url [ 'query' ]; //取出url中的查询字符串 if ( $url_query ){ //如果有查询字符串,则删除查询字串中当前页的查询字段如:&page=$page或page=$page ereg ( '(^|&)page=([0-9]*)' , $url_query , $k ); $this ->page = $k [2]; //取得当前页的值 $url_query = ereg_replace ( "(^|&)page=$this->page" , '' , $url_query ); //删除查询字串中当前页的查询字段如:&page=$page或page=$page $this ->url = str_replace ( $parse_url [ 'query' ], $url_query , $this ->url); //保留其他的查询字串, $this ->page = $this ->page ? $this ->page : 1; //w如果查询字符串中没有当前页的值就设当前页为1 if ( $url_query ){ //如果有其他查询字符串,则以&page=$page形式添加翻页查询字串 $this ->url .= '&page' ; } else { //如果没有其他查询字串,则以page=$page形式添加翻页查询字串 $this ->url .= 'page' ; } } else { //如果没有查询字串,则在url后添加?page=$page形式的翻页查询字串 $this ->page = 1; $this ->url .= '?page' ; } $this ->lastpg = ceil ( $this ->total / $this ->displaypg); //计算总页数,即最后一页的页码 $this ->page = min( $this ->lastpg, $this ->page); //如果当前页大于总页数,则当前页为最后一页的页码 $this ->prepg = $this ->page - 1; //上一页为当前页减一www.111cn.net $this ->nextpg = $this ->page + 1; //(($this->page == $this->lastpg) ? $this->lastpg : ($this->page + 1));//下一页为当前页加一,如果当前页为最后一页,则下一页为0 $this ->firstcount = ( $this ->page - 1) * $this ->displaypg; //计算当前页,记录条数开始的记录号,从0开始. $this ->startd = $this ->total ? ( $this ->firstcount + 1) : 0; //记录开始号从1开始 $this ->stopd = min( $this ->firstcount + $this ->displaypg, $this ->total); //记录结束号 //echo $this->displaypg; //echo $this->nextpg.'+=+='.$this->lastpg; } public function getpageinfo(){ //取得当前页面的基本信息,如:显示第 1-10 条记录,共 23 条记录。 return '<span class="pageinfostyle">显示第<span class="numstyle">' . $this ->startd. '-' . $this ->stopd. '</span>条记录,共<span class="numstyle">' . $this ->total. '</span>条记录。</span>' ; } public function getcommonpagenav(){ //取得通常的分页导航,如:首页 上一页 下一页 尾页 $commonnav = '' ; if ( $this ->lastpg == 1){ //如果只有一页,则返回翻页导航,退出,不显示下一页,上一页等。。。 return $commonnav ; break ; } $commonnav = '<a href="' . $this ->url. '=1" class="compagestyle">首页</a>' ; //设置首页导航,page=1 if ( $this ->prepg){ $commonnav .= '<a href="' . $this ->url. '=' . $this ->prepg. '" class="compagestyle">上一页</a>' ; } else { $commonnav .= '<a class="fcompagestyle">上一页</a>' ; } if ( $this ->nextpg <= $this ->lastpg){ $commonnav .= '<a href="' . $this ->url. '=' . $this ->nextpg. '" class="compagestyle">下一页</a>' ; } else { $commonnav .= '<a class="fcompagestyle">下一页</a>' ; } $commonnav .= '<a href="' . $this ->url. '=' . $this ->lastpg. '" class="compagestyle">尾页</a>' ; //显示尾页链接 return $commonnav ; } //取得跳转分页导航,如:第n页 public function getjumppagenav(){ //<select name='topage' size='1' onchange='window.location="/test/page.php?page="+this.value'> $jumpnav = '<span class="pageinfostyle">到第<select name="topage" size="1" class="topage" onchange=' window.location= "'.$this->url.'=" +this.value '>' . " " ; for ( $i = 1; $i <= $this ->lastpg; $i ++){ if ( $i == $this ->page){ //把当前页的页码作为默认选项 $jumpnav .= '<option value="' . $i . '" selected>' . $i . '</option>' . " " ; } else { $jumpnav .= '<option value="' . $i . '">' . $i . '</option>' . " " ; } } $jumpnav .= '</select>页,共<span class="numstyle">' . $this ->lastpg. '</span>页</span>' ; return $jumpnav ; } //取得所有的分页导航 public function getallpagenav(){ $temp = $this ->getpageinfo(). $this ->getcommonpagenav(). $this ->getjumppagenav(); //开源代码phpfensi.com return $temp ; } //取得当前页需显示的记录,在数据库教程中的限定范围,如0-9 public function getlimitstr(){ //echo $this->page; //echo $this->firstcount; //echo $this->dispalypg; $temp = $this ->firstcount. ',' . $this ->displaypg; //echo $temp; return $temp ; } }使用实例,代码如下:
$result =mysql_query( "select * from tb_pagetest" ); //从数据库中查询所需显示的数据 $total =mysql_num_rows( $result ); //查询到的数据的总条数 $pagesize = 5; //每页显示的记录条数 $url = $_server [ 'request_uri' ]; //请求的uri $dividepageclass = new dividepage( $url , $total , $pagesize ); //创建分页类,(类能自动初始化) $limitstr = $dividepageclass ->getlimitstr(); //取得当前页要显示的记录开始序号和每页显示条数,如:0, 5(显示从0开始的5条记录) echo $dividepageclass ->getallpagenav(); //显示所有分页导航条, 如:显示第11-13条记录,共13条记录。首页 上一页 下一页 尾页 到*第 1 页,共 3 页 $sql = 'select * from tb_pagetest limit ' . $limitstr ; $result =mysql_query( $sql ); //从数据库中取得当前页要显示的记录集,然后显示就ok 如: while ( $row =mysql_fetch_array( $result )) echo "<hr><b>" . $row [title]. " | " . $row [author];
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did27972