分页类
<?php
/*
* 该工具类是分页技术
* 默认每页显示10条信息,显示列表数为8
*/
//Tools名称与上一级名称相同,
namespace Tools;
class Page{
private $total; //数据表中的总记录数
private $listRows; //每页显示行数
private $limit; //每页显示的条数
private $uri; //URL地址
private $pageNum; //页数
//配置
private $config = array('header'=>"个记录",'prev'=>"上一页",'next'=>"下一页",'first'=>"首页",'list'=>"尾页");
private $listNum = 8;//限制页码列表数目
/*
* $total 总记录条数
* $listRows 每页显示条数
*/
public function __construct($total,$ListRows = 10,$pa="") {
$this ->total = $total;
$this ->listRows = $ListRows;
$this ->uri = $this ->getUri($pa);
$this ->page = !empty($_GET['page'])? $_GET['page'] : 1;
$this ->pageNum = ceil($this->total/$this->listRows);
$this ->limit = $this ->setLimit();
}
//设置每页显示的条数
private function setLimit(){
return " Limit ".($this->page -1) * $this->listRows.",{$this->listRows}";
}
//获得请求URL地址
private function getUri($pa){
$url = $_SERVER["REQUEST_URI"].(strpos($SERVER["REQUEST_URI"], '?')?'':"?").$pa;
$parse = parse_url($url);
if(isset($parse['query'])){
parse_str($parse['query'],$params);
unset($params['page']);
$url = $parse['path'].'?'.http_build_query($params);
}
return $url;
}
//魔术方法,作用:只允许调用私有成员
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(){
$html = "";
if($this->page==1){
$html.='';
} else {
$html.=" <a href='{$this->uri}&page=1'>{$this->config["first"]}</a> ";
}
return $html;
}
//上一页
private function prev(){
$html.='';
if($this->page == 1){
$html.='';
}else{
$html.=" <a 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 href='{$this->uri}&page={$page}'>{$page}</a> ";
}
$linkPage.=" {$this->page} ";
//页数链接
for ($i=1 ;$i<=$inum;$i++){
$page = $this->page + $i;
if($page<= $this->pageNum){
$linkPage.=" :<a href = '{$this->uri}&page={$page}'>{$page}</a> ";
}else{
break;
}
}
return $linkPage;
}
//跳转到下一页
private function next(){
$html="";
if($this->page == $this->pageNum){
$html='';
}else{
$html.=" <a href='{$this->uri}&page=".($this->page+1)."'>{$this->config["next"]}</a> ";
}
return $html ;
}
//调到最后一页
private function last(){
$html="";
if($this->page == $this->pageNum){
$html.='';
} else {
$html.=" <a href='{$this->uri}&page=".($this->pageNum)."'>{$this->config["last"]}</a> ";
}
return $html ;
}
//跳转到指定的一页
private function goPage(){
return ' <input type="text" onkeydown="javascript:if(evebt.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;localtion=\''.$this->uri.'&page=\'+page+\'\'}" value="'.$this->page.'"style="width:25px"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.': this.previousSbling.value;locction=\''.$this->uri.'&page=\'+page+\'\"> ';
}
function fpage($display = array(0,1,2,3,4,5,6,7,8)){
$html[0] = " 共有<b>{$this->total}</b>{$this->config["header"]} ";
$html[1] = " 每页显示<b>".($this->end() - $this->start() + 1 )."</b>条,本页<b>{$this->start()}-{$this->end()}</b>条 ";
$html[2] = " <b>{$this->page}/{$this->pageNum}</b>页 ";
$html[3] = $this->first();
$html[4] = $this->prev();
$html[5] = $this->pageList();
$html[6] = $this->next();
$html[7] = $this->last();
$html[8] = $this->goPage();
$fpage='';
foreach ($display as $index){
$fpage.=$html[$index];
}
return $fpage;
}
}