zoukankan      html  css  js  c++  java
  • 一个仿tp5分页组件的实现

    样式:

    a{
        text-decoration: none;
        color: inherit;
    }
    .out-cp{
        width:100%;
        text-align: center;
    }
    .c-page{
        display:inline-block;
        height:42px;
        margin:50px 0 ;
    }
    .c-page > div{
        float: left;
        height:42px;
    }
    .c-page > div:not(:first-child){
        margin-left: 10px;
    }
    .c-page > div > a{
        height:40px;
        display: block;
        border-top: solid 1px #e5e5e5;
        border-right:solid 1px #e5e5e5;
        border-bottom:solid 1px #e5e5e5;
        float: left;
        font-size: 14px;
        letter-spacing: 1px;
        color: #333333;
        text-align: center;
        line-height: 40px;
    }
    .c-page > div > a:hover,.c-page > div > a.on{
        color: #ffffff;
        background-color: #699dff;
        border-color:#699dff; ;
    }
    .c-page > div > a:nth-child(1){
        border-left: solid 1px #e5e5e5;
    }
    .c-page > .c-page-lefts > a:nth-child(1),.c-page > .c-page-rights > a:nth-child(2){
        width: 50px;
    }
    
    .c-page > .c-page-lefts > a:nth-child(2),.c-page > .c-page-rights > a:nth-child(1){
        width: 80px;
    }
    .c-page > .c-page-middles > a{
        width: 40px;
    }
    
    .c-page > div > a:nth-child(1){
        border-radius: 4px 0px 0px 4px;
    }
    .c-page > div > a:last-child{
        border-radius: 0px 4px 4px 0px;
    }
    
    
    .c-page > .c-page-lefts > a:nth-child(2):before,.c-page > .c-page-rights > a:nth-child(1):after{
        content: '';
        display: inline-block;
        width:7px;
        height:12px;
        position: relative;
        top:1px;
    }
    .c-page > .c-page-lefts > a:nth-child(2):before{
        background: url("http://www.yangqu.com/images/ccpageb.png")center center no-repeat;
        margin-right: 5px;
    }
    .c-page > .c-page-rights > a:nth-child(1):after{
        background: url("http://www.yangqu.com/images/ccpageb.png")center center no-repeat;
        margin-left: 5px;
        transform:rotate(180deg);
    }
    .c-page > .c-page-lefts > a:nth-child(2):hover:before{
        background: url("http://www.yangqu.com/images/ccpagea.png")center center no-repeat;
    }
    .c-page > .c-page-rights > a:nth-child(1):hover:after{
        background: url("http://www.yangqu.com/images/ccpagea.png")center center no-repeat;
        transform:rotate(180deg);
    }
    
    .c-page > .c-page-lefts > a:nth-child(2).dis:before{
        background: url("http://www.yangqu.com/images/ccpagec.png")center center no-repeat;
    }
    
    .c-page > .c-page-rights > a:nth-child(1).dis:after{
        background: url("http://www.yangqu.com/images/ccpagec.png")center center no-repeat;
    
        transform:rotate(180deg);
    }
    
    .c-page > div > a.dis{
        background-color: #FBFBFB;
        color: #C9C9C9;
        cursor: not-allowed;
        border-color: #e5e5e5;
    }

    逻辑:

    /*
    
     * 接收sql语句,获取列表以及分页
    
     */
    
    
    
    function cPage($sql,$pageSize = 10){
        global $db;
    
        //分页要素:pageNow 、 pageSize
    
    
    
        /*
    
         * 编辑sql语句查询count
    
         */
    
        $csql  =preg_replace("/SELECT.*FROM/i" , 'SELECT COUNT(*) FROM',$sql);
    
        $res = $db->fetch_array($db->query($csql));
    
        $item_count = $res['COUNT(*)'];
    
        $pageCount = intval($item_count / $pageSize) + ($item_count % $pageSize > 0 ? 1 : 0);
    
    
    
    
    
        /*
    
         * 接受并且检测pageNow
    
         * 1:若 pageNow 不为正整数,则 pageNow = 1
    
         *  2: 若 pageNow 大于 $pageCount ,则 $pageNow = $pageCount;
    
         */
    
        $pageNow = (preg_match("/^[1-9][0-9]*$/",$_GET['pageNow'])) ? $_GET['pageNow'] : 1;
        var_dump($pageNow);
        $pageNow = $pageNow > $pageCount ? $pageCount : $pageNow;
    
        $offset = ($pageNow - 1) * $pageSize;
    
        $data = [];
    
        $sql .= " LIMIT $offset,$pageSize";
    
        $result = $db->query($sql);
    
        while($r = $db->fetch_array($result)){
    
            $data[] = $r;
    
        }
    
    
        //生成[get] param
    
        $paramData = $_GET;
    
        $paramStr = '?';
    
        $flag_1 = 0;
    
        foreach ($paramData as $k => $v){
    
            // ..
    
            if($k == 'pageNow'){
    
                continue;
    
            }
    
            if($flag_1 > 0){
    
                $paramStr .= '&';
    
            }
    
            $paramStr .= "$k=$v";
    
            $flag_1 ++;
    
        }
    
        if(!$flag_1){
    
            $paramStr .= "pageNow=";
    
        }else{
    
            $paramStr .= "&pageNow=";
    
        }
    
    
    
    
    
        // html
    
        $html = '<div class="out-cp">
    
                    <div class="c-page">';
    
        $html .= '        <div class="c-page-lefts">
    
                                <a href="'.($paramStr . 1).'">首页</a>';
    
        /*
    
         * 上一页。两种情况:
    
         * true  : 当前不为第一页 且 pageCount > 1
    
         * false  :  the else
    
         */
    
        if($pageNow > 1  && $pageCount > 1 ){
    
            $html .= ' <a href="'.$paramStr . ($pageNow - 1).'">上一页</a>';
    
        }else{
    
            $html .= ' <a class="dis">上一页</a>';
    
        }
    
        $html .= "</div>";
    
        /*
    
         * mid
    
         * 最多显示7个页码,且当前页优先位于最中间
    
         */
    
        $midPage = [];
    
    
    
        if($pageCount  > 7){
    
            // left..
    
            if(($pageNow - 3 ) < 1){
    
                $midPage = range(1,7);
    
            }
    
            // ..
    
            else if( ($pageCount - $pageNow) < 3){
    
                $midPage = range($pageCount - 6,$pageCount);
    
            }
    
            else{
    
                $midPage = range($pageNow - 3,$pageNow + 3);
    
            }
    
        }else{
    
            if($pageCount > 0){
    
                $midPage = range(1,$pageCount);
    
            }else{
    
                $midPage = [];
    
            }
    
    
    
        }
    
    
    
        $html .= '<div class="c-page-middles">';
    
    
    
        foreach ($midPage as $k_1 => $v_2){
    
            // selected
    
            if($v_2 == $pageNow){
    
                $html .= '<a class="on" href="'.$paramStr . $v_2 .'">'.$v_2.'</a>';
    
            }else{
    
                $html .= '<a href="'.$paramStr . $v_2 .'">'.$v_2.'</a>';
    
            }
    
        }
    
        $html .= "</div>";
    
    
    
        /*
    
         * 下一页;两种情况:
    
         * true : pageCount > pageNow
    
         * false : ..else..
    
         */
    
        $html .= '<div class="c-page-rights">';
    
        if($pageCount > $pageNow){
    
            $html .= '<a href="'.$paramStr . ($pageNow + 1).'">下一页</a>';
    
        }else{
    
            $html .= '<a  class="dis">下一页</a>';
    
        }
    
        $html .= '        <a href="'.$paramStr . $pageCount.'">尾页</a>
    
                            </div>
    
                                </div>
    
                                    </div>';
    
        return ['data' => $data , 'pageCode' => $html];
    
    }

    /*
     * 接收sql语句,获取列表以及分页
     */


    function cPage($sql,$pageSize = 10){    global $db;
        //分页要素:pageNow 、 pageSize


        /*
         * 编辑sql语句查询count
         */
        $csql  =preg_replace("/SELECT.*FROM/i" , 'SELECT COUNT(*) FROM',$sql);
        $res = $db->fetch_array($db->query($csql));
        $item_count = $res['COUNT(*)'];
        $pageCount = intval($item_count / $pageSize) + ($item_count % $pageSize > 0 ? 1 : 0);




        /*
         * 接受并且检测pageNow
         * 1:若 pageNow 不为正整数,则 pageNow = 1
         *  2: 若 pageNow 大于 $pageCount ,则 $pageNow = $pageCount;
         */
        $pageNow = (preg_match("/^[1-9][0-9]*$/",$_GET['pageNow'])) ? $_GET['pageNow'] : 1;    var_dump($pageNow);    $pageNow = $pageNow > $pageCount ? $pageCount : $pageNow;
        $offset = ($pageNow - 1) * $pageSize;
        $data = [];
        $sql .= " LIMIT $offset,$pageSize";
        $result = $db->query($sql);
        while($r = $db->fetch_array($result)){
            $data[] = $r;
        }

        //生成[get] param
        $paramData = $_GET;
        $paramStr = '?';
        $flag_1 = 0;
        foreach ($paramData as $k => $v){
            // ..
            if($k == 'pageNow'){
                continue;
            }
            if($flag_1 > 0){
                $paramStr .= '&';
            }
            $paramStr .= "$k=$v";
            $flag_1 ++;
        }
        if(!$flag_1){
            $paramStr .= "pageNow=";
        }else{
            $paramStr .= "&pageNow=";
        }




        // html
        $html = '<div class="out-cp">
                    <div class="c-page">';
        $html .= '        <div class="c-page-lefts">
                                <a href="'.($paramStr . 1).'">首页</a>';
        /*
         * 上一页。两种情况:
         * true  : 当前不为第一页 且 pageCount > 1
         * false  :  the else
         */
        if($pageNow > 1  && $pageCount > 1 ){
            $html .= ' <a href="'.$paramStr . ($pageNow - 1).'">上一页</a>';
        }else{
            $html .= ' <a class="dis">上一页</a>';
        }
        $html .= "</div>";
        /*
         * mid
         * 最多显示7个页码,且当前页优先位于最中间
         */
        $midPage = [];


        if($pageCount  > 7){
            // left..
            if(($pageNow - 3 ) < 1){
                $midPage = range(1,7);
            }
            // ..
            else if( ($pageCount - $pageNow) < 3){
                $midPage = range($pageCount - 6,$pageCount);
            }
            else{
                $midPage = range($pageNow - 3,$pageNow + 3);
            }
        }else{
            if($pageCount > 0){
                $midPage = range(1,$pageCount);
            }else{
                $midPage = [];
            }


        }


        $html .= '<div class="c-page-middles">';


        foreach ($midPage as $k_1 => $v_2){
            // selected
            if($v_2 == $pageNow){
                $html .= '<a class="on" href="'.$paramStr . $v_2 .'">'.$v_2.'</a>';
            }else{
                $html .= '<a href="'.$paramStr . $v_2 .'">'.$v_2.'</a>';
            }
        }
        $html .= "</div>";


        /*
         * 下一页;两种情况:
         * true : pageCount > pageNow
         * false : ..else..
         */
        $html .= '<div class="c-page-rights">';
        if($pageCount > $pageNow){
            $html .= '<a href="'.$paramStr . ($pageNow + 1).'">下一页</a>';
        }else{
            $html .= '<a  class="dis">下一页</a>';
        }
        $html .= '        <a href="'.$paramStr . $pageCount.'">尾页</a>
                            </div>
                                </div>
                                    </div>';
        return ['data' => $data , 'pageCode' => $html];
    }

  • 相关阅读:
    如何使用Java计算货币/钱~(How to calculate monetary values in Java)
    BigDecimal类
    状态码定义
    常见服务器返回状态码(Status Codes)
    2020-3-26学习地图
    ReentrantLock类
    HashSet类
    Vector类
    课程总结
    第十四周课程总结&实验报告
  • 原文地址:https://www.cnblogs.com/cl94/p/11846537.html
Copyright © 2011-2022 走看看