我正在努力改进网站的分页系统,我遇到了一些我似乎无法解决的简单问题。我试图一次显示页面(1 2 3 4 5),当用户到达第5页时,列表变为类似(4 5 6 7 8)。我怎么能用cfloop做到这一点?以下是我的代码示例:
<cfloop from="1" to="#totalPages#" index="i">
<cfoutput><a class="paging" href="?start=#(i*25)-24#">#i#</a></cfoutput>
</cfloop>
目前它同时显示第1 - 54页。有什么提示吗?
答案 0 :(得分:4)
继承我的代码
<cfset curPage = Int(start / 25) + 1>
<cfloop from="1" to="#totalPages#" index="i">
<cfif i is curPage>
<div class="page current">#i#</div>
<cfelse>
<cfif totalPages lte 5 or i is 1 or i is totalPages or (i gt curPage - 3 and i lt curPage + 3) or ((curPage is 1 or curPage is 2) and i lt 6) >
<div class="page"><a href="?start=#(i*25)-24#">#i#</a></div>
<cfelse>
<cfif i is 2 or i is totalPages - 1>
<div class="more">...</div>
</cfif>
</cfif>
</cfif>
</cfloop>
这段代码的作用是显示前5页,然后是省略号,然后是最后一页。当您翻阅它时,它将始终显示指向第一页和最后一页的链接,以及当前页面之前和之后的2页。
屏幕截图:第1页和第10页
您应该可以轻松修改此功能,以便按照您的需要进行操作。 (我碰巧不喜欢所有的链接一下子按照你描述的方式改变)
答案 1 :(得分:2)
有一个很棒的开源分页库可以解决您的问题。我不能说它的好东西,因为我写了。无耻,我知道。反正:
http://www.dopefly.com/projects/pagination/
查看文档,它们非常完整且有用。在您的代码中,打印页码就像调用#pagination.getRenderedHTML()#
一样简单。它非常可定制,因此您可以更改打印的数字,并根据需要设置输出样式。
答案 2 :(得分:0)
怎么样:
<cfloop from="#url.startpage#" to="#url.startpage+4#" index="i">
<cfif i LE totalpages>
<cfoutput><a class="paging" href="?start=#(i*25)-24#">#i#</a></cfoutput>
</cfif>
</cfloop>
当然,您需要在网址中添加“startpage”并对其进行适当操作。所以你的第一个链接是startpage = 1,但你的最后一个是startpage = 4(如果我理解你的问题)。