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;
        }
    }
    ?>

  • 相关阅读:
    DAO层的作用
    JSP+DAO中servlet的作用
    Linux常用命令
    数据结构与算法之动态规划
    JVM之垃圾回收机制
    单例模式详解
    线程池基础知识
    解决Spring MVC Controller中输出中文出现的乱码问题
    LinkedList与ArrayList的get(int index)方法区别
    黄清山 | 2021软件代码开发技术作业五 | 代码开发、测试及发布
  • 原文地址:https://www.cnblogs.com/sooj/p/2842843.html
Copyright © 2011-2022 走看看