<?
PHP class paginator { public $total; //全部条数,从
数据库取出 public $prePage = 10; //每页的条数 protected $curr= 1; //默认当前
页码 public function __construct($total,$prePage='') { $this->total = $total; //把总条目信息放在total
属性 if ($prePage > 0) { $this->prePage = $prePage; //把每页
数量放在perPage
属性 } //计算当前
页码 if (isset($_GET['page']) && ($_GET['page'] + 0) > 0) { $this->curr = $_GET['page'] + 0; } } //主体
函数 public function pageItem() { if ($this->total <=0) { return ''; //如果总条目<=0 直接返回空字符串 } $cnt = ceil($this->total / $this->prePage); //算总页数,进一取整 //根据当前页,算
上一页,
下一页 /* 分析url,有几种情况? xx.
PHP xx.
PHP?id=5 xx.
PHP?page=3 xx.
PHP?id=5&page=3 */ //最终
生成的URL里边必然有page=N $url = $_SERVER['REQUEST_URI']; $parse = parse_url($url); //把URL分析结果放在数组里 //print_r($parse); //保证参数里边有page if (!isset($parse['query'])) { $parse['query'] = 'page=' .$this->curr; } //把query字符串分析成数组,再次确保有page选项 parse_str($parse['query'],$parms); if (!array_key_exists('page',$parms)) { $parms['page'] = $this->curr; } //上边四种情况都测试一遍,page参数都能
生成 //print_r($parms); //判断除了page之外,还有没有其他参数 if (count($parms) == 1) { $url = $parse['path'] . '?'; } else { unset($parms['page']); $url = $parse['path'] . '?' . http_build_query($parms) . '&'; } //echo $url $prev = $this->curr - 1; $next = $this->curr + 1; //
首页 $indexLink = '<a href="' . $url .'page=' . 1 . '">
首页</a>'; //
上一页 if ($prev < 1) { $prevLink = ''; }else { $prevLink = '<a href="' . $url .'page=' . $prev . '">
上一页</a>'; } //
下一页 if ($next > $cnt) { $nextLink = ''; }else { $nextLink = '<a href="' . $url .'page=' . $next . '">
下一页</a>'; } //尾页 $lastLink = '<a href="' . $url .'page=' . $cnt . '">尾页</a>'; //echo $indexLink.' '.$prevLink.' '.$nextLink .' '.$lastLink; //
上一页,1 2 3 4 5
下一页 $start = $this->curr - (5-1)/2; //计算左侧开始的
页码 $end = $this->curr + (5-1)/2; //计算右侧开始的
页码 //如果左侧的
页面,已经小于1,则把小于1 的部分补到右侧 if ($start < 1) { $end += (1 - $start); $start = 1; //
修改start = 1 if ($end > $cnt) { $end = $cnt; } } //把右侧超出的部分,补到左边 if ($end > $cnt) { $start -= ($end - $cnt); $end = $cnt; if ($start < 1) { $start = 1; } } //循环
出页码数 $pageStr = ''; for ($i=$start; $i <= $end ; $i++) { if ($i == $this->curr) { $pageStr .= "<a class=\"gray\">{$i}</a>"; continue; } $pageStr .= '<a href="' . $url . 'page=' . $i . '">' . $i . '</a>'; } return "<p class=\"page
Box\">".$indexLink.$prevLink.$pageStr.$nextLink.$lastLink."</p>"; } //主体
函数AJAX版 public function pageItem_ajax($
Box,$asy=FALSE) { if ($this->total <=0) { return ''; //如果总条目<=0 直接返回空字符串 } $cnt = ceil($this->total / $this->prePage); //算总页数,进一取整 //根据当前页,算
上一页,
下一页 /* 分析url,有几种情况? xx.
PHP xx.
PHP?id=5 xx.
PHP?page=3 xx.
PHP?id=5&page=3 */ //最终
生成的URL里边必然有page=N $url = $_SERVER['REQUEST_URI']; if ($asy==false) { $script = <<<SCRIPT <input id='paginatorCurrentPage' type='hidden' value='{$url}'/> <script>aja = function (url,
Box,page) { $("#searchPage").val(''); $("#searchPage").val(page); $("#"+
Box).attr("action",""); $("#"+
Box).attr("action",url); $("#"+
Box).submit(); }</script> SCRIPT; }else { $script = <<<SCRIPT <script>aja = function (url,page) { var searchdate = $("#searchdate").val(); var searchstatus = $("#searchstatus").val(); $.ajax({ url:url,data:{searchdate:searchdate,searchstatus:searchstatus},type:"post",dateType:"html",success: function (msg){ $("#"+
Box).html(msg); } }) }</script> SCRIPT; } $parse = parse_url($url); //把URL分析结果放在数组里 //print_r($parse); //保证参数里边有page if (!isset($parse['query'])) { $parse['query'] = 'page=' .$this->curr; } //把query字符串分析成数组,再次确保有page选项 parse_str($parse['query'],$parms)) { $parms['page'] = $this->curr; } //上边四种情况都测试一遍,page参数都能
生成 //print_r($parms); //判断除了page之外,还有没有其他参数 if (count($parms) == 1) { $url = $parse['path'] . '?'; } else { unset($parms['page']); $url = $parse['path'] . '?' . http_build_query($parms) . '&'; } //echo $url $prev = $this->curr - 1; $next = $this->curr + 1; //
首页 $indexLink = "<a href=\"javascript:aja('{$url}page=1','{$
Box}','1')\">
首页</a>"; //
上一页 if ($prev < 1) { $prevLink = ''; }else { // $prevLink = '<a href="' . $url .'page=' . $prev . '">
上一页</a>'; $prevLink = "<a href=\"javascript:aja('{$url}page={$prev}','{$prev}')\">
上一页</a>"; } //
下一页 if ($next > $cnt) { $nextLink = ''; }else { // $nextLink = '<a href="' . $url .'page=' . $next . '">
下一页</a>'; $nextLink = "<a href=\"javascript:aja('{$url}page={$next}','{$next}')\">
下一页</a>"; } //尾页 // $lastLink = '<a href="' . $url .'page=' . $cnt . '">尾页</a>'; $lastLink = "<a href=\"javascript:aja('{$url}page={$cnt}','{$cnt}')\">尾页</a>"; //echo $indexLink.' '.$prevLink.' '.$nextLink .' '.$lastLink; //
上一页,1 2 3 4 5
下一页 $start = $this->curr - (5-1)/2; //计算左侧开始的
页码 $end = $this->curr + (5-1)/2; //计算右侧开始的
页码 //如果左侧的
页面,已经小于1,则把小于1 的部分补到右侧 if ($start < 1) { $end += (1 - $start); $start = 1; //
修改start = 1 if ($end > $cnt) { $end = $cnt; } } //把右侧超出的部分,补到左边 if ($end > $cnt) { $start -= ($end - $cnt); $end = $cnt; if ($start < 1) { $start = 1; } } //循环
出页码数 $pageStr = ''; for ($i=$start; $i <= $end ; $i++) { if ($i == $this->curr) { $pageStr .= "<a class=\"gray\" style='color:red'>{$i}</a>"; continue; } $pageStr .= "<a href=\"javascript:aja('{$url}page={$i}','{$i}') \">{$i}</a>"; } $pageInfo = "<a style='color:#ccc;'>{$this->total}条记录,第{$this->curr}页,共{$cnt}页。</a>"; return "<p class=\"page
Box\">{$script}".$indexLink.$prevLink.$pageStr.$nextLink.$lastLink.$pageInfo."</p>"; } }