<?php
class Pager {
private $optionArr = array();
function __construct($optionArr=array()) {
$this->optionArr = $optionArr;
$this->optionArr['page_count'] = ceil($this->optionArr['total_num']/$this->optionArr['page_size']);
}
function __destruct() {
unset($this->optionArr);
}
/*
construct_num_Page该函数使用来构造显示的条目
即使:[1][2][3]...[8][9][10]
*/
private function construct_page_num() {
//$currentArr数组代表要显示的元素,0代表不显示,-1代表显示...,其他的数字是多少就显示哪个数字
$currentPage = $this->optionArr['page_num'];
$pageCount = $this->optionArr['page_count'];
$currentArr =array( 0, 0, $currentPage - 2, $currentPage - 1, $currentPage, $currentPage + 1, $currentPage + 2, 0, 0 );
if ($pageCount > 0) $currentArr[0] = 1;
if ($pageCount> 1) $currentArr[8] = $pageCount;
if ($pageCount > 2) $currentArr[1] = 2;
if ($pageCount > 3) $currentArr[7] = $pageCount - 1;
for ($i = 2; $i < 7; $i++) {
if ($currentArr[$i] < 3 || $currentArr[$i] > $pageCount - 2) {
$currentArr[$i] = 0;
}
}
if ($currentArr[2] != 0) $currentArr[2] = -1;
if ($currentArr[6] != 0) $currentArr[6] = -1;
return $currentArr;
}
/*
构造普通模式的分页
*/
public function show_page() {
$currentPage = $this->optionArr['page_num'];
$pageCssStr='<div class="mode_turn_page">';
$pageCssStr.="<span class=\"total\">总数:".$this->optionArr['total_num']." </span>";
if($currentPage>1) { //如果当前页不是第一页就显示 上一页
$pageCssStr .= "<span class=\"prev\"><a href=\"javascript:loadData('".($currentPage-1)."');\">上一页</a></span>";
}else {
$pageCssStr .= "<span class=\"prev2\"><a href=\"javascript:void(0);\">上一页</a></span>";
}
$pageArray=$this->construct_page_num();
foreach($pageArray as $showPage) {
if ($showPage == 0) {
continue;
}else if ($showPage == -1) {
$pageCssStr .="<span>...</span>";
}else if ($showPage == $currentPage) {
$pageCssStr .='<span class="num_now">'.$showPage.'</span>';
}else {
$pageCssStr .="<span><a href=\"javascript:loadData('".($showPage)."');\" class=\"num\">".$showPage."</a></span>";
}
}
if($currentPage < $this->optionArr['page_count']) {
$pageCssStr .="<span class=\"next\"><a href=\"javascript:loadData('".($currentPage+1)."');\">下一页</a></span>";
}else {
$pageCssStr.="<span class='next2'><a href=\"javascript:void(0);\">下一页</a></span>";
}
$pageCssStr .= "<span class=\"t_text\">跳转到</span>";
$pageCssStr .= "<input id='t__cp' type='text' class='tiaozhuan' onfocus='bindEvent(this)' value='".$currentPage."'/>";
$pageCssStr .= "<span class=\"t_text\">页</span>";
$pageCssStr .= "<span class=\"enter\"><a href=\"javascript:__g(document.getElementById('t__cp').value)\">确定</a></span>";
$pageCssStr .= "</div>";
$pageCssStr .= $this->build_script();
echo $pageCssStr;
}
//简易分页
public function show_simple_page() {
$currentPage = $this->optionArr['page_num'];
$simplePageStr ='<span class="fy_jy">';
if($currentPage > 1) { //如果当前页不是第一页就显示 上一页
$simplePageStr .= "<span class=\"prev_jy\"><a href=\"javascript:loadData('".($currentPage-1)."');\"></a></span>";
}else {
$simplePageStr .= "<span class=\"prev_jy2\"></span>";
}
$simplePageStr .= "<span class=\"fy_n\">第".$currentPage."页</span>";
if($currentPage < $this->optionArr['page_count'] ) { //如果当前页不是最后一页就显示 下一页和末页
$simplePageStr .= "<span class=\"next_jy\"><a href=\"javascript:loadData('".($currentPage+1)."');\"></a></span>";
}else {
$simplePageStr .= "<span class='next_jy2'></span>";
}
$simplePageStr .='</span>';
$simplePageStr .= $this->build_script();
echo $simplePageStr;
}
private function build_script() {
$pageScriptStr = '';
$pageScriptStr .= "<script type='text/javascript'>function __g(p){";
$pageScriptStr .= "if(isNaN(p) || parseInt(p)!=p || p<=0 || p>".$this->optionArr['page_count'].")alert('页码必须是1-".$this->optionArr['page_count']."的整数');";
$pageScriptStr .= "else javascript:loadData(document.getElementById('t__cp').value);};";
$pageScriptStr .= "function bindEvent(obj){obj.onkeypress=function(e){if((arguments[0] || window.event).keyCode==13) __g(this.value);}};";
if(isset($this->optionArr['ajax'])) {
$pageScriptStr .= "function loadData(page){ $.get('".$this->build_page_url()."'+page,function(msg) { $(\"#".$this->optionArr["ajax"]["target_id"]."\").html(msg); });}";
}else {
if(isset($this->optionArr['loaddata'])){//允许外面定义的分页函数
$pageScriptStr .= "function loadData(page){".$this->optionArr['loaddata']."(page);}";
}
else{
$pageScriptStr .= "function loadData(page){window.location.href=\"".$this->build_page_url()."\"+page}";
}
}
$pageScriptStr .="</script>";
return $pageScriptStr;
}
private function get_current_url() {
$url = "";
if(isset($_SERVER['REQUEST_URI'])) {
$url = $_SERVER['REQUEST_URI'];
}else {
if(isset($_SERVER['argv'])) {
$url = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0];
}else {
$url = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING'];
}
}
return $url;
}
private function build_page_url() {
$url = '';
if(!empty($this->optionArr['ajax']['url'])) {
$url = $this->optionArr['ajax']['url'];
} else {
$url = $this->get_current_url();
}
// 若&page在URL中间,则原来的代码有问题。这里将page参数强制放到URL的最后。
if(!is_int(strpos($url,'?'))) $url .='?';
$url = preg_replace('/&page\=\d+/i', '', $url);
$url .='&page=';
//$url = is_int(strpos($url,'&page=')) ? $url : $url.'&page=';
//$url = preg_replace('/&page\=\d+/i','&page=',$url);
return $url;
}
}
?>