PHP学习实例—6(完美分页类)

  主要是实现了分页类的一些css特效,前面照着网上写的分页类,但是效果一直不怎么好,今天花了点时间去修饰了下,不过感觉上还是比较水。。。

分页类 page.class.php

<html>
<head>
  <style>
   #contains1 {
    width: 850px;
    margin: 5px auto;
 
   }
   #contains12 {
   	 margin: 5px auto;
     width: 410px;
     float: left;
     
   }
    #contains123 {
     width: 440px;
     margin: 5px auto;
      float: left;
    }
		.special {
			display: block;
			float: left;
			text-align: center;
			margin-left: 10px;
			width: 30px;
			border: 1px solid black;
			margin-left: 2px;
			text-align: center;
			text-decoration: none;
		}
	
	 .special:hover {
			background: #0F6;
		}
		#a2 {
			 width: 30px;
			background: #0F0;
			margin-left: 2px;
			text-align: center;
			text-decoration: none;
			background: #CF0;
		}
	</style>
</head>
<?php
		class Page {
		  private $total; //记录总数
			private $listRows; //每页显示行数
			private $limit; //限定条件
			private $uri;  //获取地址
			private $pageNum; //最多能分几页
			private $config = array("header"=>"记录", "prev"=>"<<", "next"=>">>", 'first'=>"首页", "last"=>"尾页");
			private $listNum = 6; //数字衔接
			
			public function __construct($total, $listRows = 10) { //构造函数
			  $this->total = $total;
				$this->listRows = $listRows; 
				$this->uri = $this->getUri();
				$this->page = !empty($_GET["page"])?$_GET["page"]:1; //当不能取到page值的时候就为首页1 否则为当前page值
			  $this->pageNum = ceil($this->total/$this->listRows);
				$this->limit = $this->setLimit();
		//		var_dump($this);
			}
			
			private function setLimit() {
				return "Limit ".($this->page-1)*$this->listRows.", {$this->listRows}"; //当前页数减一乘以每页显示的数目
			}
			
			private function getUri() { //如何获取uri
				$url = $_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], '?')?'':"?"); //在后面加了一个问号
				//获取地址栏上的地址 如果传了page则 不改变 如果没有则需要加个?方便传值
				$parse = parse_url($url);
				//将地址栏分成两部分
			//	print_r($parse);
				if (isset($parse["query"])) { //当存在传值的page的情况
				  parse_str($parse['query'],$params);
					unset($params["page"]);//先删除
				//	print_r($params)
				  $url = $parse['path'].'?'.http_build_query($params);
				}
				return $url;
			}
			
			private function __get($args) {
				if ($args == 'limit')
				  return $this->limit;
				else 
				  return null;
			}
			private function start() {
			  if ($this->total == 0) return 0;
				else return ($this->page - 1) * $this->listRows + 1;
			}
			private function end() {
			  return min($this->page*$this->listRows, $this->total);
			}
			
			private function first() {
				if ($this->page == 1) $html .= '';
				else $html .= "  <a class='special' href='{$this->uri}&page=1'>{$this->config["first"]}</a>  ";
				return $html;
			}
			
			private function prev() {
				if ($this->page == 1) {
					$this->page == 1;
				  $html .= "  <a class='special' href='{$this->uri}&page=".($this->page)."'>{$this->config["prev"]}</a>  ";
				}
				else $html .= "  <a class='special' href='{$this->uri}&page=".($this->page - 1)."'>{$this->config["prev"]}</a>  ";
				return $html;
			}
			
			private function pageList() {
				$linkPage = "";
				$inum = floor($this->listNum / 2);
				for ($i = $inum; $i >= 1; $i--) {
				  $page = $this->page - $i;
					if ($page < 1) continue;
					$linkPage .= " <a class='special' href='{$this->uri}&page={$page}'>{$page}</a> ";
				}
				$linkPage .= " <a class='special' id='a2'>{$this->page}</a> ";
				for ($i = 1; $i < $inum; $i++) {
				  $page = $this->page + $i;
					if ($page <= $this->pageNum)
					  $linkPage .= " <a class='special' href='{$this->uri}&page={$page}'>{$page}</a> ";
					else 
					  break;
				}
			//	$linkPage .= '</div>';
				return $linkPage;
			}
			
			private function next() {
				if ($this->page == $this->pageNum) {
					$this->page = $this->pageNum;
				  $html .= "  <a class='special' href='{$this->uri}&page=".($this->page)."'>{$this->config["next"]}</a>  ";}
				else $html .= "  <a class='special' href='{$this->uri}&page=".($this->page + 1)."'>{$this->config["next"]}</a>  ";
				return $html;
			}
			private function last() {
				if ($this->page == $this->pageNum) $html .= '';
				else $html .= "  <a class='special' href='{$this->uri}&page=$this->pageNum'>{$this->config["last"]}</a>  ";
				return $html;
			}
		
			function fpage() {
				$html .= "<div id='contains1'>";
				$html .="<div id='contains12'>";
			  $html .= "  <a>共有<b>{$this->total}</b>{$this->config['header']}</a>  ";
			$html .= "  <a>本页显示<b>".($this->end() - $this->start()+1)."</b>条,本页<b>{$this->start()}-{$this->end()}</b></a>  ";
				$html .= "  <a><b>{$this->page}/{$this->pageNum}</b>页</a>  ";
				$html .= '</div>';
		//	  $html .= $this->first();
		    $html .= "<div id='contains123'>";
				$html .= $this->prev();
				$html .= $this->pageList();
				$html .= $this->next();
			//	$html .= $this->last();
				$html .= "</div>";
				$html .= "</div>";
				return $html;
			}
		}
?>
</html>
用法: index.php 
	<?php
  			//导入配置文件
  			  require("dbconfig.php");
  			//链接数据库,选择数据库
  			  $link = mysql_connect(HOST, USER, PASS) or die(数据库连接失败);
  			  mysql_select_db(DBNAME, $link);
  			//分页显示内容====================================
  				$sql = "select * from news";
  				$result = mysql_query($sql);
  				$total = mysql_num_rows($result); //获取总行数
  				$num = 5;
  				$page = new Page($total, $num);
  				$sql = "select * from news {$page->limit}"; //计算分页的内容是从几到几
  				$result = mysql_query($sql);
  				echo $page->fPage();
  				  while ($row = mysql_fetch_assoc($result)) {
  			    echo "<tr>";
  			     
  			      echo "<td>{$row['title']}</td>";
  			      echo "<td>{$row['keywords']}</td>";
  			      echo "<td>{$row['author']}</td>";
  			      echo "<td>".date("Y-m-d", $row['addtime'])."</td>";
  			      echo "<td>{$row['content']}</td>";
  			      echo "<td>
  			             <a href = 'javascript:del({$row['id']})'>删除</a> 
  			             <a href = 'javascript:update({$row['id']})'>修改</td>"; 
  			    echo "</tr>";
  			  }

代码不全,大概就是这样,写好了类,然后再用的话感觉特别方便。。不过这个分页类的css属性用的时候还是要自己去修改下,不然可能会出现点问题。。。类里面的显示首页,尾页也可以加上去。不过加了就要在改下属性了。。修改样式的时候记得把面的空格去掉,不然会影响样式。。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值