样式:

  1. a{
  2. text-decoration: none;
  3. color: inherit;
  4. }
  5. .out-cp{
  6. width:100%;
  7. text-align: center;
  8. }
  9. .c-page{
  10. display:inline-block;
  11. height:42px;
  12. margin:50px 0 ;
  13. }
  14. .c-page > div{
  15. float: left;
  16. height:42px;
  17. }
  18. .c-page > div:not(:first-child){
  19. margin-left: 10px;
  20. }
  21. .c-page > div > a{
  22. height:40px;
  23. display: block;
  24. border-top: solid 1px #e5e5e5;
  25. border-right:solid 1px #e5e5e5;
  26. border-bottom:solid 1px #e5e5e5;
  27. float: left;
  28. font-size: 14px;
  29. letter-spacing: 1px;
  30. color: #333333;
  31. text-align: center;
  32. line-height: 40px;
  33. }
  34. .c-page > div > a:hover,.c-page > div > a.on{
  35. color: #ffffff;
  36. background-color: #699dff;
  37. border-color:#699dff; ;
  38. }
  39. .c-page > div > a:nth-child(1){
  40. border-left: solid 1px #e5e5e5;
  41. }
  42. .c-page > .c-page-lefts > a:nth-child(1),.c-page > .c-page-rights > a:nth-child(2){
  43. width: 50px;
  44. }
  45.  
  46. .c-page > .c-page-lefts > a:nth-child(2),.c-page > .c-page-rights > a:nth-child(1){
  47. width: 80px;
  48. }
  49. .c-page > .c-page-middles > a{
  50. width: 40px;
  51. }
  52.  
  53. .c-page > div > a:nth-child(1){
  54. border-radius: 4px 0px 0px 4px;
  55. }
  56. .c-page > div > a:last-child{
  57. border-radius: 0px 4px 4px 0px;
  58. }
  59.  
  60. .c-page > .c-page-lefts > a:nth-child(2):before,.c-page > .c-page-rights > a:nth-child(1):after{
  61. content: '';
  62. display: inline-block;
  63. width:7px;
  64. height:12px;
  65. position: relative;
  66. top:1px;
  67. }
  68. .c-page > .c-page-lefts > a:nth-child(2):before{
  69. background: url("http://www.yangqu.com/images/ccpageb.png")center center no-repeat;
  70. margin-right: 5px;
  71. }
  72. .c-page > .c-page-rights > a:nth-child(1):after{
  73. background: url("http://www.yangqu.com/images/ccpageb.png")center center no-repeat;
  74. margin-left: 5px;
  75. transform:rotate(180deg);
  76. }
  77. .c-page > .c-page-lefts > a:nth-child(2):hover:before{
  78. background: url("http://www.yangqu.com/images/ccpagea.png")center center no-repeat;
  79. }
  80. .c-page > .c-page-rights > a:nth-child(1):hover:after{
  81. background: url("http://www.yangqu.com/images/ccpagea.png")center center no-repeat;
  82. transform:rotate(180deg);
  83. }
  84.  
  85. .c-page > .c-page-lefts > a:nth-child(2).dis:before{
  86. background: url("http://www.yangqu.com/images/ccpagec.png")center center no-repeat;
  87. }
  88.  
  89. .c-page > .c-page-rights > a:nth-child(1).dis:after{
  90. background: url("http://www.yangqu.com/images/ccpagec.png")center center no-repeat;
  91.  
  92. transform:rotate(180deg);
  93. }
  94.  
  95. .c-page > div > a.dis{
  96. background-color: #FBFBFB;
  97. color: #C9C9C9;
  98. cursor: not-allowed;
  99. border-color: #e5e5e5;
  100. }

逻辑:

  1. /*
  2.  
  3. * 接收sql语句,获取列表以及分页
  4.  
  5. */
  6.  
  7. function cPage($sql,$pageSize = 10){
  8. global $db;
  9.  
  10. //分页要素:pageNow 、 pageSize
  11.  
  12. /*
  13.  
  14. * 编辑sql语句查询count
  15.  
  16. */
  17.  
  18. $csql =preg_replace("/SELECT.*FROM/i" , 'SELECT COUNT(*) FROM',$sql);
  19.  
  20. $res = $db->fetch_array($db->query($csql));
  21.  
  22. $item_count = $res['COUNT(*)'];
  23.  
  24. $pageCount = intval($item_count / $pageSize) + ($item_count % $pageSize > 0 ? 1 : 0);
  25.  
  26. /*
  27.  
  28. * 接受并且检测pageNow
  29.  
  30. * 1:若 pageNow 不为正整数,则 pageNow = 1
  31.  
  32. * 2: 若 pageNow 大于 $pageCount ,则 $pageNow = $pageCount;
  33.  
  34. */
  35.  
  36. $pageNow = (preg_match("/^[1-9][0-9]*$/",$_GET['pageNow'])) ? $_GET['pageNow'] : 1;
  37. var_dump($pageNow);
  38. $pageNow = $pageNow > $pageCount ? $pageCount : $pageNow;
  39.  
  40. $offset = ($pageNow - 1) * $pageSize;
  41.  
  42. $data = [];
  43.  
  44. $sql .= " LIMIT $offset,$pageSize";
  45.  
  46. $result = $db->query($sql);
  47.  
  48. while($r = $db->fetch_array($result)){
  49.  
  50. $data[] = $r;
  51.  
  52. }
  53.  
  54. //生成[get] param
  55.  
  56. $paramData = $_GET;
  57.  
  58. $paramStr = '?';
  59.  
  60. $flag_1 = 0;
  61.  
  62. foreach ($paramData as $k => $v){
  63.  
  64. // ..
  65.  
  66. if($k == 'pageNow'){
  67.  
  68. continue;
  69.  
  70. }
  71.  
  72. if($flag_1 > 0){
  73.  
  74. $paramStr .= '&';
  75.  
  76. }
  77.  
  78. $paramStr .= "$k=$v";
  79.  
  80. $flag_1 ++;
  81.  
  82. }
  83.  
  84. if(!$flag_1){
  85.  
  86. $paramStr .= "pageNow=";
  87.  
  88. }else{
  89.  
  90. $paramStr .= "&pageNow=";
  91.  
  92. }
  93.  
  94. // html
  95.  
  96. $html = '<div class="out-cp">
  97.  
  98. <div class="c-page">';
  99.  
  100. $html .= ' <div class="c-page-lefts">
  101.  
  102. <a href="'.($paramStr . 1).'">首页</a>';
  103.  
  104. /*
  105.  
  106. * 上一页。两种情况:
  107.  
  108. * true : 当前不为第一页 且 pageCount > 1
  109.  
  110. * false : the else
  111.  
  112. */
  113.  
  114. if($pageNow > 1 && $pageCount > 1 ){
  115.  
  116. $html .= ' <a href="'.$paramStr . ($pageNow - 1).'">上一页</a>';
  117.  
  118. }else{
  119.  
  120. $html .= ' <a class="dis">上一页</a>';
  121.  
  122. }
  123.  
  124. $html .= "</div>";
  125.  
  126. /*
  127.  
  128. * mid
  129.  
  130. * 最多显示7个页码,且当前页优先位于最中间
  131.  
  132. */
  133.  
  134. $midPage = [];
  135.  
  136. if($pageCount > 7){
  137.  
  138. // left..
  139.  
  140. if(($pageNow - 3 ) < 1){
  141.  
  142. $midPage = range(1,7);
  143.  
  144. }
  145.  
  146. // ..
  147.  
  148. else if( ($pageCount - $pageNow) < 3){
  149.  
  150. $midPage = range($pageCount - 6,$pageCount);
  151.  
  152. }
  153.  
  154. else{
  155.  
  156. $midPage = range($pageNow - 3,$pageNow + 3);
  157.  
  158. }
  159.  
  160. }else{
  161.  
  162. if($pageCount > 0){
  163.  
  164. $midPage = range(1,$pageCount);
  165.  
  166. }else{
  167.  
  168. $midPage = [];
  169.  
  170. }
  171.  
  172. }
  173.  
  174. $html .= '<div class="c-page-middles">';
  175.  
  176. foreach ($midPage as $k_1 => $v_2){
  177.  
  178. // selected
  179.  
  180. if($v_2 == $pageNow){
  181.  
  182. $html .= '<a class="on" href="'.$paramStr . $v_2 .'">'.$v_2.'</a>';
  183.  
  184. }else{
  185.  
  186. $html .= '<a href="'.$paramStr . $v_2 .'">'.$v_2.'</a>';
  187.  
  188. }
  189.  
  190. }
  191.  
  192. $html .= "</div>";
  193.  
  194. /*
  195.  
  196. * 下一页;两种情况:
  197.  
  198. * true : pageCount > pageNow
  199.  
  200. * false : ..else..
  201.  
  202. */
  203.  
  204. $html .= '<div class="c-page-rights">';
  205.  
  206. if($pageCount > $pageNow){
  207.  
  208. $html .= '<a href="'.$paramStr . ($pageNow + 1).'">下一页</a>';
  209.  
  210. }else{
  211.  
  212. $html .= '<a class="dis">下一页</a>';
  213.  
  214. }
  215.  
  216. $html .= ' <a href="'.$paramStr . $pageCount.'">尾页</a>
  217.  
  218. </div>
  219.  
  220. </div>
  221.  
  222. </div>';
  223.  
  224. return ['data' => $data , 'pageCode' => $html];
  225.  
  226. }

/*
 * 接收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. MySQL char与varchar 的区别

    一.差异 1.占用存储空间上 char 初始化时占固定空间,varchar依据插入内容大小使用空间. 2.char最大字符长度255个(约0.1KB),varchar则是65535(约192KB). ...

  2. MySQL 8 服务器组件

    MySQL 服务器包含了一个基于组件的架构,用于扩展服务器功能.服务器和其他组件可以使用组件提供的服务.(在使用服务方面,服务器也是一个组件,等同于其他组件).组件之间交互仅通过他们各自提供的服务. ...

  3. springboot web - 建立路由

    一. 测试代码 @RestController @RequestMapping("/book") public class BookController { @PostMappin ...

  4. E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null } 报错记录

    这个一般分为两种情况,第一新增数据出现约束.而你在orm里面写了唯一约束.这种情况就比较简单,添加数据时保证数据字段唯一性就好了. 第二种情况比较难找,因为你发现你在orm里面并没有写约束,但是还是插 ...

  5. 安装Elasticsearch到Linux(源码)

    运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Elasticsearch-7.1.0 硬件要求:最低2核4GB 安装过程 1.源码安装JDK ...

  6. LeetCode 112. 路径总和 (递归遍历二叉树)

    题目链接:https://leetcode-cn.com/problems/path-sum/ 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 ...

  7. Winform中怎样设置ContextMenuStrip右键菜单的选项ToolStripMenuItem添加照片

    场景 怎样在Winform程序中添加鼠标右键时使子选项显示图片. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程序猿 获取编程 ...

  8. python中的strip()方法

    python中字符串str的strip()方法 str.strip()就是把字符串(str)的头和尾的空格,以及位于头尾的\n \t之类给删掉. 例1: str=" python " ...

  9. LaTeX技巧012:LaTeX 插图加载宏包

    LaTeX 插图加载宏包.支持 LaTeX - DVIPDFMx; pdfLaTeX; XeLaTeX 三种编译方式,支持 eps/pdf/jpg/png 等图片格式. % Put this snip ...

  10. c#后端 小程序上传图片

    c#后端: /// <summary> /// 上传图片 /// </summary> /// <returns></returns> [HttpPos ...