所以我在PHP中这样做,但这是一个逻辑问题所以我会尽量把它写成一般.
从这里开始,这个分页脚本是如何工作的:
for(画前三页链接)
if(如果#1页面和#3页面之间有页面,则绘制省略号(...))
for(绘制当前页面和链接两侧的两页)
if(绘制elipsis(...)如果#3页面和#5页面之间有页面)
for(画最后三页链接)
问题是,当页面数量很少时(我在页面计数为10时注意到这一点)应该有一个省略号,但没有绘制.
在代码上:
$page_count = 10; //in actual code this is set properly $current_page = 1; //in actual code this is set properly for ($i = 1;$i <= 3;$i++) { if ($page_count >= $i) echo $i; } if ($page_count > 3 && $current_page >= 7) echo "..."; for ($i = $current_page - 2;$i <= current_page + 2;$i++) { if ($i > 3 && $i < $page_count - 2) echo $i; } if ($page_count > 13 && $current_page < $page_count - 5) echo "..."; for ($i = $page_count - 2;$i <= $page_count;$i++) { if ($page_count > 3) echo $i; }
因此,我认为最好的想法是修改两个省略号if语句中的一个以包含这样的情况,但是我已经尝试过并且难倒了.
另请注意,为了便于阅读,我将这段代码浓缩,所以请不要给出一些提示,例如"for循环无效,因为它们会重新计算current_page - 每次迭代2次",因为我知道:)
对于那些想要查看此逻辑当前如何工作的细分的人,这里是使用迭代$ page_count和$ current_page的示例输出(已修改). http://rafb.net/p/TNa56h71.html
$totalPages - $anchorSize || ($page >= $currentPage - $halfWindowSize && $page <= $currentPage + $halfWindowSize) || ($page == $anchorSize + 1 && $page == $currentPage - $halfWindowSize - 1) || ($page == $totalPages - $anchorSize && $page == $currentPage + $halfWindowSize + 1 )) { $elipsesCount = 0; if ($page == $currentPage) echo ">$page< "; else echo "[$page] "; // if not, have we already shown the elipses? } elseif ($elipsesCount == 0) { echo "... "; $elipsesCount+=1; // make sure we only show it once } } echo "\n"; } // // Examples and output // paginate(1000, 1, 3, 3); // >1< [2] [3] ... [98] [99] [100] paginate(1000, 7, 3, 3); // [1] [2] [3] ... [6] >7< [8] ... [98] [99] [100] paginate(1000, 4, 3, 3); // [1] [2] [3] >4< [5] ... [98] [99] [100] paginate(1000, 32, 3, 3); // [1] [2] [3] ... [31] >32< [33] ... [98] [99] [100] paginate(1000, 42, 7, 2); // [1] [2] ... [39] [40] [41] >42< [43] [44] [45] ... [99] [100]