当前位置:  开发笔记 > 编程语言 > 正文

分页问题[PHP]

如何解决《分页问题[PHP]》经验,为你挑选了1个好方法。

所以我在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



1> 小智..:
 $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] 

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有