美文网首页
分页逻辑的思考

分页逻辑的思考

作者: linfree | 来源:发表于2016-06-12 11:00 被阅读199次

/*

  • 今天偶有空闲,于是便想把之前随意放上的一段代码做个解释。
  • 其实以现在的角度(过去了两三个月)来看这个标题,明显感觉有点装逼了。
  • 主要原因是这个简单的问题还算不上思考
  • 不过既然都写了,就继续装下去吧。

*/
先上代码,项目里抽取的一段,基于tp的.主要看思路.

      <div class="pages">
                    <if condition="$totalPage eq 1"> <!-- 只用一页的情况 -->
                    <a href="/page/1">1</a>
                    <elseif condition="($totalPage gt 1) AND ($totalPage elt 8)"/><!-- 总页数是2到8也的情况 -->
                        <if condition="$page eq 1">    <!-- 当前页是1的情况   -->                          
                                <for start="1" end="$totalPage+1">
                                <a href="/page/{$i}">{$i}</a>     
                                </for>                         
                                <a href="/page/{$page+1}">下一页</a>
                        <elseif condition="$page eq $totalPage "/><!-- 当前页是最后一页的情况   --> 
                                <a href="/page/{$page-1}">上一页</a>
                                <for start="1" end="$totalPage+1">
                                <a href="/page/{$i}">{$i}</a>   
                                </for>                           
                        <else /><!-- 其他(不等于第一和最后一页的)情况   --> 
                              <a href="/page/{$page-1}">上一页</a>
                                <for start="1" end="$totalPage+1">
                                <a href="/page/{$i}">{$i}</a>   
                                </for>
                                <a href="/page/{$page+1}">下一页</a>
                        </if>
                    <elseif condition="$totalPage egt 8"/>
                        <if condition="$page eq 1">    <!-- 当前页是1的情况   -->                          
                                <for start="1" end="9">
                                <a href="/page/{$i}">{$i}</a>     
                                </for>                         
                                <a href="/page/{$page+1}">下一页</a>
                        <elseif condition="($page gt 1) AND ($page lt 5)"/> <!-- 当前页是2-4的情况   -->   
                                <a href="/page/{$page-1}">上一页</a>
                                <for start="1" end="9">
                                <a href="/page/{$i}">{$i}</a>   
                                </for>                           
                                <a href="/page/{$page+1}">下一页</a>
                        <elseif condition="($page egt 5) AND ($page elt ($totalPage-3))"/><!-- 当前页是5-倒数第4的情况   -->  
                                <a href="/page/{$page-1}">上一页</a>
                                <for start="(-4)" end="4">
                                <a href="/page/{$page+$i}">{$page+$i}</a>   
                                </for>                           
                                <a href="/page/{$page+1}">下一页</a>
                        <elseif condition="$page eq $totalPage"/> <!-- 当前页是最后一页情况   -->
                                <a href="/page/{$page-1}">上一页</a>
                                <for start="-7" end="1">
                                <a href="/page/{$page+$i}">{$page+$i}</a>   
                                </for>   
                        <elseif condition="$page gt ($totalPage-3)"/><!--当前页大于最大页数-3且不等于最大页数的情况。-->
                                <a  href="/page/{$page-1}">上一页</a>
                                <for start="($totalPage-$page)-7" end="($totalPage-$page)+1">
                                <a href="/page/{$page+$i}">{$page+$i}</a>   
                                </for>                           
                                <a href="/page/{$page+1}">下一页</a>
                        </if>        
                    </if>
             </div>

其实在备注中已经很明显了。
分为以下几种情况,总页面数:

1.总页数只有一页的情况

假设总页数只有1页的话,当前页肯定是1,且没有上一页或下一页

2.总页数2页到8页的情况(假设共显示八页)

首先,总页数小于8的话,所有的页面都应该显示。直接用for循环到最大页数。
这种情况下,假设当前页是1的话,就没有上一页,有下一页。
假设当前页是最后一页的话,有上一页,但是没有下一页。
其他情况下就是上一页和下一页都有。

3.总页数大于8页的情况

这种情况稍微复杂,因为需要控制页面的输出
假设当前页是1到5页的情况,显示的是1-8页。并且,当前页是1的情况没有上一页。
分离出来就是:
当前页为1的情况:没有上一页,有下一页,显示1-8页,
当前页为2-5的情况,有上一页和下一页,显示1-8页,
那么当页码大于5页的时候呢??这个时候就需要考虑到三种种情况,
一种是:①当前页小于最大页数-3的情况,这个情况下,就显示当前页-4页到当前页+3页,
另一种是:②当前页大于最大页数-3且不等于最大页数的情况。
最后就是:③当前页是最大页数的情况。
这三种情况总结一下就是:
情况①:显示上一页和下一页,页码是当前页-4页到当前页+3页
情况②:显示上一页和下一页,显示当前(页总页数-当前页)-7 到(总页数-当前页)+1 ps:这种情况稍微要奇怪
情况③:显示上一页,不显示下一页,(显示当前页-8)到 当前页。

相关文章

  • 分页逻辑的思考

    /* 今天偶有空闲,于是便想把之前随意放上的一段代码做个解释。 其实以现在的角度(过去了两三个月)来看这个标题,明...

  • Mybatis 分页方案 逻辑分页 or 物理分页

    一、什么是逻辑分页 逻辑分页:先查询所有数据到内存,再从内存截取需要数据 ,属于前台分页 二、什么是物理分页 物理...

  • 分页查询

    分页查询 就是将将过多的结果在有限的界面上分多页来显示,一般将分页查询分为两类:逻辑分页、物理分页。 逻辑分页:是...

  • LayUI组件使用-分页组件

    一、分页组件 layPage 致力于提供极致的分页逻辑,既可轻松胜任异步分页,也可作为页面刷新式分页。自 layu...

  • MyBatis 最佳实践篇 1:分页

    1 默认分页(逻辑分页) MyBatis 默认提供了分页功能,即 RowBounds 类,该类提供两个参数:off...

  • mybatis小知识-逻辑分页和物理分页

    Mybatis的分页操作可以分为物理分页和逻辑分页。他们之间有什么区别呢?在什么场景下使用什么样的分页呢? 1. ...

  • iOS Realm数据持久化--List容器分页(三)

    本章讲解基于List容器的Realm数据分页,基于List容器的分页是常用的分页逻辑,就是分批把数据缓存到List...

  • Django框架(十): 分页

    前言:当数据很多时,需要把数据分页展示,就需要用到分页 1.分页的基本逻辑 1.1 分页会用到的基本元素 每页数据...

  • 物理分页与逻辑分页

    一 概述 1.物理分页 物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit...

  • django 分页

    Django 中已经写好了分页实现的逻辑,我们在做分页的时候,仅需要通过俩个对象Paginator 和 Page ...

网友评论

      本文标题:分页逻辑的思考

      本文链接:https://www.haomeiwen.com/subject/lwuedttx.html