zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    ?>

  • 相关阅读:
    SGU 176.Flow construction (有上下界的最大流)
    POJ 2391.Ombrophobic Bovines (最大流)
    poj 1087.A Plug for UNIX (最大流)
    poj 1273.PIG (最大流)
    POJ 2112.Optimal Milking (最大流)
    SGU 196.Matrix Multiplication
    SGU 195. New Year Bonus Grant
    关于multicycle path
    ppt做gif动图
    codeforces 598A Tricky Sum
  • 原文地址:https://www.cnblogs.com/sooj/p/2842843.html
Copyright © 2011-2022 走看看