当前位置:首页 > PHP教程 > php分页 > 列表

经典php分页代码,支持数字偏移

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-15 16:33:58 浏览: 评论:0 

这款php分页代码是一款完整的php mysql css的经典分页功能,很适合于大分类有像phpwindow dz等论坛效果.

CSS样式代码如下:

  1. <style type="text/css"> 
  2. <!-- 
  3. body { 
  4.  width:800px; 
  5.  margin:0 auto; 
  6.  margin-top:50px; 
  7.  font-size:12px; 
  8. } 
  9. a { 
  10.  color:#014ccc; 
  11.  text-decoration:none; 
  12. } 
  13. .div { 
  14.  float:left; 
  15.  cursor:pointer; 
  16.  font-weight:bold; 
  17.  margin-right:5px; 
  18.  display: block; 
  19.  padding:3px 7px; 
  20.  text-align:center; 
  21.  border:#bbdded solid 1px; 
  22. } 
  23. .divs { 
  24.  float:left; 
  25.  font-weight:bold; 
  26.  margin-right:5px; 
  27.  display: block; 
  28.  padding:3px 7px; 
  29.  text-align:center; 
  30.  border:#cccccc solid 1px; 
  31. } 
  32. .divsi { 
  33.  float:left; 
  34.  font-weight:bold; 
  35.  margin-right:5px; 
  36.  display: block; 
  37.  padding:3px 7px; 
  38.  text-align:center; 
  39.  background:#3399ff; 
  40.  color:#ffffff; 
  41.  border:#cccccc solid 1px; 
  42. } 
  43. .div:hover { 
  44.  background:#3399ff; 
  45.  color:#ffffff; 
  46. } 
  47. .divsi:hover { 
  48.  background:#3399ff; 
  49.  color:#ffffff; 
  50. } 
  51. --> 
  52. </style> 

PHP实例效果代码如下:

  1. <?php 
  2. mysql_connect('localhost','root',''); 
  3. mysql_select_db('news'); 
  4. mysql_query('set names gbk'); 
  5.  
  6. $sql = mysql_query("select * from `v_char`"); 
  7. $num = mysql_num_rows($sql); 
  8. include 'page.class.php'; 
  9. /*参数说明: 
  10.  *getpages($pagesize,$pagenum,$page,$init,$page_len); 
  11.  *$pagesize 每页记录 
  12.  *$pagenum 总记录数 
  13.  *$page $_get[page] 
  14.  *$init 数字分页最小数,默认为1,一般不用更改。 
  15.  *$page_len 数字分页的数量。 
  16. */ 
  17. $model = new getpages(10,$num,$_get['page']); 
  18.  
  19. $sql = "select * from `v_char` limit $model->offset,$model->pagesize"; 
  20. $res = mysql_query($sql); 
  21. while($row = mysql_fetch_assoc($res)) 
  22. { 
  23.  echo $row['id'] . " - " . $row['name'] .'<br>'; 
  24. } 
  25.  
  26. //输出分页信息 
  27. echo $model->getpage(); 
  28. ?> 
  29.  
  30. page.class.php 
  31.  
  32. <?php 
  33. /* 
  34.  * author:陈凯 
  35.  * data:2010-09-14 
  36.  */ 
  37. class getpages 
  38. { 
  39.  public $pagesize;  //每页记录 
  40.  public $offset;    //起始记录数 
  41.  public $pagenum;   //总记录 
  42.  public $page;      //当前页码 
  43.  public $init;      //数字分页最左边数字 
  44.  public $page_len;  //数字分页最右边数字 
  45.  public $pages;     //总页数 
  46.   
  47.  //初始化赋值。 
  48.  function __construct($pagesize,$pagenum,$page,$init=1,$page_len=7) 
  49.  { 
  50.   $this->pagesize = $pagesize;//每页记录 
  51.   $this->pagenum  = $pagenum; //总记录 
  52.   $this->page     = $page; 
  53.   $this->pages    = ceil($this->pagenum/$this->pagesize); //总页数 
  54.   if(emptyempty($this->page) || $this->page <1 || $this->page > $this->pages)$this->page=1; 
  55.   $this->init     = $init; //数字分页左 
  56.   $this->page_len = $page_len;//数字分页右 
  57.   $this->offset   = ($this->page-1)*$this->pagesize; 
  58.  } 
  59.   
  60.  //输出分页 
  61.  function getpage() 
  62.  { 
  63.   $this->prepg = $this->page-1;  //上一页 
  64.   $this->nextpg= ($this->page == $this->pages) ? 0 : $this->page+1;  //下一页 
  65. //   if($this->pages == 1) return false;  //如果只有一页跳出 
  66.   $pagenav = "<span class='divs'>共 ".$this->pages."页".$this->pagenum."条</span>"; 
  67.    if($this->page == 1) 
  68.    { 
  69.     $pagenav .="<a href='#' class='div'>首页</a> "; 
  70.     $pagenav .="<a href='#' class='div'>上一页</a> "; 
  71.    } 
  72.    else 
  73.    { 
  74.      $pagenav .="<a href='".$this->get_url()."=1' class='div'>首页</a> "; 
  75.     $pagenav .="<a href='".$this->get_url()."=".$this->prepg."' class='div'>上一页</a> ";   
  76.    } 
  77.     
  78.    $pagenav .= $this->getvalpage(); //数字分页 
  79.     
  80.    if($this->page == $this->pages) 
  81.    { 
  82.      $pagenav .="<a href='#' class='div'>下一页</a> "; 
  83.     $pagenav .="<a href='#' class='div'>尾页</a> ";  
  84.    } 
  85.    else 
  86.    { 
  87.       $pagenav .="<a href='".$this->get_url()."=".$this->nextpg."' class='div'>下一页</a> "; 
  88.     $pagenav .="<a href='".$this->get_url()."=".$this->pages."' class='div'>尾页</a> "; 
  89.    }//开源代码phpfensi.com 
  90.   //下拉菜单分页列表 
  91.   
  92.  
  93.   
  94.  
  95.  代码如下 复制代码  
  96.  $pagenav .= "<select name='page' class='select' onchange='window.location.href="".$this->get_url()."="+this.value'> "; 
  97.     
  98.    for($i=1;$i<=$this->pages;$i++) 
  99.    { 
  100.     if($i == $this->page){ 
  101.      $pagenav .= "<option value='".$i."' selected>".$i."</option> "; 
  102.     } 
  103.     else 
  104.     { 
  105.      $pagenav .= "<option value='".$i."'>".$i."</option> "; 
  106.     } 
  107.    } 
  108.    $pagenav.="</select> "; 
  109.     
  110.    return $pagenav; 
  111.  } 
  112.   
  113.  //数字分页 
  114.  function getvalpage() 
  115.  { 
  116.   $max_p = $this->pages; 
  117.   $this->page_len  = ($this->page_len%2) ? $this->page_len : $this->page_len+1; //如果为偶数便+1 
  118.   $pageoffset = ($this->page_len-1)/2; //数字分页左右数量 
  119.    
  120.   //总页数和数字分页显示数 
  121.   if($this->pages > $this->page_len) 
  122.   { 
  123.    //数字分页左右数量大于等于当前页面,不进行偏移 
  124.    if($pageoffset>=$this->page) 
  125.    { 
  126.     $this->init = 1; 
  127.     $max_p= $this->page_len; 
  128.    } 
  129.    else 
  130.    { 
  131.     //当前页码+左右数量 大于总数量,不进行偏移 
  132.     if($this->page+$pageoffset > $this->pages) 
  133.     { 
  134.      $this->init  = $this->pages-$this->page_len+1; 
  135.     } 
  136.     else 
  137.     { 
  138.      //进行偏移,最左边 当前页码 - 左右数量 
  139.      $this->init   = $this->page-$pageoffset; 
  140.      $max_p = $this->page+$pageoffset; 
  141.     } 
  142.    } 
  143.   } 
  144.    
  145.   //循环数字分页 
  146.   for($i=$this->init ;$i<=$max_p;$i++) 
  147.   { 
  148.    //$i 等于 当前页码 
  149.    if($i == $this->page) 
  150.    { 
  151.     $pagenav .= "<a href='#' class='divsi'>".$i."</a>"; 
  152.    } 
  153.    else 
  154.    { 
  155.     $pagenav .= "<a href='".$this->get_url()."=".$i."' class='div'>".$i."</a>"; 
  156.    } 
  157.   } 
  158.   return $pagenav; 
  159.  } 
  160.   
  161.  //获取url地址 
  162.  function get_url() 
  163.  { 
  164.   $url = $_server['request_uri']; 
  165.   $parse_url = parse_url($url); 
  166.   $query_url = $parse_url['query']; //取出url上的参数 
  167.  
  168.   if($query_url) 
  169.   { 
  170.    //将&page 替换为空 
  171.    $query_url = ereg_replace("(^|&)page=$this->page","",$query_url); 
  172.    $url = str_replace($parse_url['query'],$query_url,$url); 
  173.    if($query_url)$url .= '&page'; 
  174.    else $url .= 'page'; 
  175.   } 
  176.   else 
  177.   { 
  178.    $url .= '?page'; 
  179.   } 
  180.   return $url; 
  181.  } 
  182. } 
  183.  
  184. ?> 

数据库代码如下:

  1. /* 
  2. navicat mysql data transfer 
  3.  
  4. source server         : localhost_3306 
  5. source server version : 50051 
  6. source host           : localhost:3306 
  7. source database       : news 
  8.  
  9. target server type    : mysql 
  10. target server version : 50051 
  11. file encoding         : 65001 
  12.  
  13. date: 2010-03-30 00:17:08 
  14. */ 
  15.  
  16. set foreign_key_checks=0; 
  17. -- ---------------------------- 
  18. -- table structure for `v_char` 
  19. -- ---------------------------- 
  20. drop table if exists `v_char`; 
  21. create table `v_char` ( 
  22.   `id` int(10) not null auto_increment, 
  23.   `name` char(10) default null, 
  24.   primary key  (`id`) 
  25. ) engine=innodb auto_increment=401 default charset=gbk; 
  26.  
  27. -- ---------------------------- 
  28. -- records of v_char 
  29. -- ---------------------------- 
  30. insert into `v_char` values ('1', 'test1'); 
  31. insert into `v_char` values ('2', 'test2'); 
  32. insert into `v_char` values ('3', 'test3'); 
  33. insert into `v_char` values ('4', 'test4'); 
  34. insert into `v_char` values ('5', 'test5'); 
  35. insert into `v_char` values ('6', 'test6'); 
  36. insert into `v_char` values ('7', 'test7'); 
  37. insert into `v_char` values ('8', 'test8'); 
  38. insert into `v_char` values ('9', 'test9'); 
  39. insert into `v_char` values ('10', 'test10'); 
  40. insert into `v_char` values ('11', 'test11'); 
  41. insert into `v_char` values ('12', 'test12'); 

Tags: php分页代码 数字偏移

分享到: