分页逻辑的思考

2016-06-12  本文已影响199人  linfree

/*

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

上一篇 下一篇

猜你喜欢

热点阅读