/*
- 今天偶有空闲,于是便想把之前随意放上的一段代码做个解释。
- 其实以现在的角度(过去了两三个月)来看这个标题,明显感觉有点装逼了。
- 主要原因是这个简单的问题还算不上思考
- 不过既然都写了,就继续装下去吧。
*/
先上代码,项目里抽取的一段,基于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)到 当前页。