php封装分页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>分页</title>
    <style type="text/css">

        .page_nav { font-family: Simsun; line-height:normal;text-align: right;margin-top: 10px;overflow: hidden;zoom: 1;text-align:center}
        .page_nav a,.page_nav  span,.page_nav  input{display:inline-block;line-height:23px;padding:0 10px;border:1px solid #ccc;background-color:#fff; text-decoration:none;color:#666;margin-right:5px;zoom: 1;}
        .page_nav  input{height: 23px;line-height: 23px;padding: 0;zoom: 1; font:12px/16px;font-family: Simsun;zoom: 1;_margin-bottom:-4px;}
        .page_nav  a:hover,.page_nav span.pg_curr{color:#fff !important;background-color:#C00;border-color:#be0d11 #be0d11 #9a0307; text-decoration:none;}
        .disabled{ background: #C00 !important; color: #fff !important;}
    </style>	
</head>
<?php
//假如输入网址是http://localhost/mysql/page/page.php?age=12&name=zhangsan
//打印$_SERVER
//var_dump($_SERVER);
//REQUEST_URI "/mysql/page/page.php?age=12&name=zhangsan" 除了协议,主机,端口号以外的所以东西
//SERVER_PORT 80 默认的端口号
//SERVER_NAME localhost 主机名
//REQUEST_SCHEME http 协议名

//$url = "http://www.baidu.com:80/index.php?age=23";
//$arr = parse_url($url);
//var_dump($arr);
//
//array(5) {
//  ["scheme"]=>
//  string(4) "http"
//  ["host"]=>
//  string(13) "www.baidu.com"
//  ["port"]=>
//  int(80)
//  ["path"]=>
//  string(10) "/index.php"
//  ["query"]=>
//  string(6) "age=23"
//}

//$str = "name=zhangsan&age=22";
//parse_str($str,$arr);&连接的字符串变成关联数组
//var_dump($arr);
//array(2) {
//  ["name"]=>
//  string(8) "zhangsan"
//  ["age"]=>
//  string(2) "22"
//}

//$arr = ["name"=>"zhangsan","age"=>"22"];
//$str = http_build_query($arr); 关联数组变成&连接的字符串
//var_dump($str);
//string(20) "name=zhangsan&age=22"



class Page{
   //每页显示多少条记录
   protected $number;
   //一共有多少条记录
   protected $totalCount;
   //当前页
   protected $page;
   //总页数
   protected $totalPage;
   //url
   protected $url;
   protected $showPage=5;//分页条中间 显示几个页的
   
   public function __construct($number,$tatalCount){
      $this->number = $number;
	  $this->tatalCount = $tatalCount;
	  //得到总页数
	  $this->totalPage = $this->getTotalPage();
	  //得到当前页数
	  $this->page = $this->getPage();
	  //得到url
	  $this->url = $this->getUrl();
      
	  
   }
   
   //获取sql语句
   function __get($name){
      if($name=='url'){
	    return $this->url;
	  }
	  if($name=='page'){
	    return $this->page;
	  }
	  if($name=='first'){
	    return $this->first();
	  }
	  if($name == 'totalPage'){
	     return $this->getTotalPage();
	  }
	  
	  return false;
   }
   
   protected function getTotalPage(){
     return ceil($this->tatalCount/$this->number);
   }
   
	/**
	 * 返回总条数
	 * @return string
	 */
	public function show_total_row(){
		return "共{$this->tatalCount}条";
	}  
	
	/**
	 * 返回总页数
	 */
	public function show_total_page(){
		return "共{$this->totalPage}页";
	}	 
   
   function getPage(){
     if(empty($_GET['page'])){
	   $page=1;
	 }else if($_GET['page']>$this->getTotalPage()){
	   $page=$this->getTotalPage();
	 }else if($_GET['page']<1){
	   $page=1;
	 }else{
	   $page=$_GET['page'];
	 }
	 return $page;

   }   
   protected function getUrl(){
      //协议名
	  $scheme = $_SERVER['REQUEST_SCHEME'];
	  //主机名
	  $host = $_SERVER['SERVER_NAME'];
	  //端口号
	  $port = $_SERVER['SERVER_PORT'];
	  //得到路径和请求字符串
	  $uri = $_SERVER['REQUEST_URI'];
	  //我们要将page=1等这种字符拼串接到url中,所以如果原先url有page这个参数,我们首先需要先将原来的page参数清空
	  //假如$uri是/mysql/page/page.php?age=12&name=zhangsan&page=1
	  $uriArray = parse_url($uri);
	  //var_dump($uriArray);	  
		/*array(2) {
		  ["path"]=>
		  string(20) "/mysql/page/page.php"
		  ["query"]=>
		  string(27) "age=12&name=zhangsan&page=1"
		}	  
       */	
	   
	   $path = $uriArray['path'];
	   if(!empty($uriArray['query'])){
	     parse_str($uriArray['query'],$array);
		 //parse_str("name=Bill&age=60",$myArray);
		 //print_r($myArray);
		 //Array ( [name] => Bill [age] => 60 )
		 unset($array['page']);
		 $query = http_build_query($array);
		 if($query!=''){
		   $path = $path.'?'.$query;
		 }
	   }
	   return $scheme.'://'.$host.':'.$port.$path;
   }
   /**
	 * 获取分页完整链接
	 * @param $url
   */
   public function get_link($url,$text){
	  return "<a href='$url'>$text</a>";
   }   
   protected function strurl($str){

      if(strpos($this->url,'?') !== false){
	     $url = $this->url.'&'.$str;
	  }else{
	     $url = $this->url.'?'.$str;
	  }
      return $url;
   }
   
   public function allUrl(){
     return [
	    'first'=>$this->first(),
		'get_next_page'=>$this->get_next_page(),
		'get_prev_page'=>$this->get_prev_page(),
		'get_end_page'=>$this->get_end_page(),
	 ];
   }
   
   public function first(){
	if ($this->page > 1 && $this->page != 1){
		return $this->get_link($this->strurl('page=1'),"首页");
	}
	return "<span>首页</span>";   
   }
   
   public function get_next_page(){
     $page = $this->page+1;
	 if($page>$this->totalPage){
	   $page = $this->totalPage;
	 }
	 if ($this->page < $this->totalPage){
		return $this->get_link($this->strurl('page='.$page),'下一页');
	 }
	 return '<span>下一页</span>';	 
	       
     //return $this->strurl('page='.$page);
   }
   
   public function get_prev_page(){
     $page = $this->page-1;
	 if($page<1){
	   $page = 1;
	 }
	 if ($this->page > 1 && $this->page !=1){
		return $this->get_link($this->strurl('page='.$page),'上一页');
	 }
	 return '<span>上一页</span>';	  
     //return $this->strurl('page='.$page);   
   }
   
   public function get_end_page(){
	 if ($this->page < $this->totalPage){
		return $this->get_link($this->strurl('page='.$this->totalPage),'尾页');
	 }
	 return '<span>尾页</span>';  
     //return $this->strurl('page='.$this->totalPage);   
   }
   
   public function limit(){
      //区间范围 例如第一页0 - 5 条 第二页 5 - 5 条 第三页10 - 5 条
      $offset = ($this->page-1)*$this->number;
      return $offset.'-'.$this->number;
	  
   }
   /**
   * 中间的数字分页
   */
   public function now_bar(){
	  $pageoffset=($this->showPage-1)/2;
	  $page_banner = '';
	  //初始化数据
	  $start=1;
	  $end=$this->totalPage; 
	  if($this->totalPage>$this->showPage){
		   //首部省略号
		   if($this->page > $pageoffset + 1){
			   $page_banner.="...";
		   }
		   //思维区
		   if($this->page>$pageoffset){
			  $start=$this->page - $pageoffset;
			  $end=$this->totalPage > $this->page + $pageoffset ? $this->page + $pageoffset : $this->totalPage;
		   }else{
			  $start=1;
			  $end=$this->totalPage > $this->showPage ? $this->showPage : $this->totalPage;
		   }
		   if($this->page + $pageoffset > $this->totalPage){
			  $start=$start - ($this->page + $pageoffset - $end);
		   }
	  }
	  //中间页数按钮
	  for($j = $start; $j <= $end; $j++){
		   if($this->page == $j){
			  $page_banner .="<span class='disabled'>{$j}</span>";        
		   }else{
			  $page_banner .= $this->get_link($this->strurl('page='.$j),$j); 
		   }			  
	  }
	  //尾部省略号
	  if($this->totalPage > $this->showPage && $this->totalPage > $this->page + $pageoffset){
		$page_banner.="...";
	  }
	  return $page_banner;	  	  
	    
   }
   public function get_ext(){
	  return '<span>...</span>';
   }
   /**
	 * 输出分页码
   */   
   public function show_page(){
      $show_page = '';
	  $show_page.= $this->show_total_row();
	  $show_page.= $this->show_total_page();
	  $show_page.=$this->first();
	  $show_page.=$this->get_prev_page();
	  $show_page.= $this->now_bar();
	  $show_page.=$this->get_next_page();
	  $show_page.=$this->get_end_page();
	  return $show_page;
   }
}
?>
<?php
   $config = include 'config.php';
   include '../model/model.php';
   $m = new Model($config);
   $page_size = 2;
   $p = new Page(2,10);//获取当前页 随便给参数
   $start = ($p->getPage()-1)*$page_size;//按照分页规律计算出数据起始条数
   $arr = $m->table('article')->field('id,title')->limit("$start,$page_size")->select();
   echo($m->sql);
   $rows = $m->table('article')->field('*')->rows();
   $page = new Page($page_size,$rows);
?>
<body>
<table border="1"  cellpadding="0">
    <tr>
        <td style="text-align: center">id</td>
        <td>新闻标题</td>
    </tr>
	<?php foreach($arr as $key=>$val):?>
        <tr>
            <td><?php echo $val['id'];?></td>
            <td><?php echo $val['title'];?></td>
        </tr>
    <?php endforeach;?>
</table>

<div class="page_nav" style="margin: 15px;">
 <?=$page->show_page();?>
</div>
 
</body>
</html>		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值