php分页类

<?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']."&nbsp;</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;
    }
}
?>

原文地址:https://www.cnblogs.com/sooj/p/2842843.html