样式:

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

一个仿tp5分页组件的实现的更多相关文章

  1. 基于iview 封装一个vue 表格分页组件

    iview 是一个支持中大型项目的后台管理系统ui组件库,相对于一个后台管理系统的表格来说分页十分常见的 iview是一个基于vue的ui组件库,其中的iview-admin是一个已经为我们搭好的后天 ...

  2. asp.net mvc4+mysql做一个简单分页组件(部分视图)

    在开始做mysql分页功能组件前,便设定的是要有一定可复用性.先在项目里Views文件夹下右键新建名为_PaginationComponent.cshtml,这里html及css我采用的bootstr ...

  3. 基于Vue.js的表格分页组件

    有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更一篇文章,分享一个自己编写的一个Vue的小组件,名叫BootPage. 不了解Vue.js的童鞋 ...

  4. javascript 分页组件

    自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下: <ul class="paginatio ...

  5. Vue.js的表格分页组件

    转自:http://www.cnblogs.com/Leo_wl/p/5522299.html 有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更 ...

  6. 转载使用Flurl制作可复用的分页组件

    使用Flurl制作可复用的分页组件 使用ASP.NET MVC查询时,一直使用MvcPaging组件,虽然需要自定义MvcPaging.Pager才能达到我想要的效果,但在没有较好的URL库时,还是这 ...

  7. asp.net core 排序过滤分页组件:sieve(1)

    使用asp.net core开发时避免不了要用一个合适的分页组件来让前端获取分页数据.github上面有一个开源的分页组件在这方面很适合我的使用,于是我把他的文档翻译一下,随后会分析它里面的源码.这是 ...

  8. Angular4.+ ngx-bootstrap Pagination 自定义分页组件

    Angular4 随笔(二)  ——自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页 ...

  9. 基于 bootstrap 的 vue 分页组件

    申手党点这里下载示例 基于 bootstrap 的 vue 分页组件,我想会有那么一部分同学,在使用Vue的时候不使用单文件组件,因为不架设 NodeJS 服务端.那么网上流传的 *.vue 的各种分 ...

随机推荐

  1. JMeter接口测试-JMeter+ant实现接口自动化测试

    前言 小伙伴们,用python做接口自动化是不是写代码比较繁琐,而且没有python代码基础的小伙伴根本无从下手对吧!今天我们来学习一下如何使用JMeter工具实现接口自动化测试. 1.安装JDK,配 ...

  2. C# WPF 表单更改提示

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议,请网站留言: 如果您觉得Dotnet9对您有帮助,欢迎赞赏 C# WPF 表单更改提示 内容目录 实现效果 业务场景 编码实现 本文参考 ...

  3. JSP页面取不到ModelAndView里面存的值

    方法1:在jsp页面上加上<%@ page isELIgnored="false" %>

  4. 剑指offer-面试题9-用两个栈实现队列-栈和队列

    /* 题目: 用两个栈实现一个队列.队列声明如下. */ /* 思路: 将值压入stack1,再从stack1弹出到stack2,则为先进先出. appendTail时直接压入stack1即可,当st ...

  5. 关于文件中"wb"与"rb"的理解

    “rb”,”wb”这两种方式在操作文件时,直接跳过了系统的编码方式,在windows系统中,用的编码为gbk: ①:with open(“a.txt”,”w”) as f1: F1.write(“aa ...

  6. linux100讲——80 系统函数库介绍

    1.系统自建了函数库,可以在脚本中引用 /etc/init.d/functions 2.自建函数库 使用 source 函数脚本文件 “导入”函数 3. vim /etc/init.d/functio ...

  7. Dev 控件笔记1 repositoryItemLookUpEdit 控件

            repositoryItemLookUpEdit 嵌套在 gridcontrol 中 作为列下拉 效果就是多列的 combox 代码如下 var y = userinfo.Select ...

  8. LAMP+discuz网站搭建过程

    LAMP+discuz网站的搭建 一. LAMP环境搭建 0x01下载配置虚拟机 网上下载centOS7 64的镜像,然后在vmware里面配置好,我配置的是linux终端桌面,运行快,占内存小. 0 ...

  9. Codeforces Round #596 (Div. 2)D.Power Products

    题意: 给一个数组,给你一个k,找出两个数字的积可以变成xk的数对对数 解析: 当且仅当,两个数进行质因子分解后每个因子的个数都是k的倍数个就说明这是满足条件的一对,可以让每个因子个数%k用map找对 ...

  10. [TJOI2009] 猜数字 - 中国剩余定理

    现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意的i,n ...