我正在改进网站的分页系统,我遇到了一些我似乎无法解决的简单问题。我试图一次显示页面 (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 页。有什么建议吗?
这是我的代码
<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 页
您应该能够轻松修改它以完全按照您想要的方式工作。 (我碰巧不喜欢所有链接都按照您描述的方式立即更改)
有一个很棒的开源分页库可以解决您的问题。我无法对它说足够多的好话,因为我写了它。无耻,我知道。无论如何:
http://www.dopefly.com/projects/pagination/
查看文档,它们非常完整且有帮助。在您的代码中,打印页码就像调用
#pagination.getRenderedHTML()#
一样简单。它是非常可定制的,因此您可以更改打印的数字,并且可以根据自己的喜好设计输出的样式。
怎么样:
<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 (如果我正确理解你的问题)。