分页逻辑的思考

/*

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

*/
先上代码,项目里抽取的一段,基于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)到 当前页。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、文本框为字符型 必填项非空校验: 1、必填项未输入--程序应提示错误; 2、必填项只输入若干个空格,未输入其它...
    许小小晴阅读 10,164评论 0 2
  • 本文包括:1、分页技术概述2、实现分页3、完善分业——分页工具条4、几种常见的分页工具条 1、分页技术概述 物理分...
    廖少少阅读 9,938评论 0 38
  • 测试最重要的是测试思路、测试策略和测试计划,只有这些前期工作做足,后面的测试执行才能针对整体的产品测试起到事半功倍...
    雷哥说阅读 5,451评论 0 8
  • (以下使用ssm+jsp实现显示所有电影为例子) 1.封装一个PageBean类 package com.enti...
    何文杰啊阅读 9,288评论 0 0
  • 效果图 先来个效果图,如果觉得丑,就不用往下看了。。。。 实验环境: 详细代码 环境搭建我就不说了,直接说说思路吧...
    cwjbest阅读 4,954评论 0 0

友情链接更多精彩内容