Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何限制分页脚本中显示的页面_Php_Pagination - Fatal编程技术网

Php 如何限制分页脚本中显示的页面

Php 如何限制分页脚本中显示的页面,php,pagination,Php,Pagination,我有一个分页脚本,我在下面发布了,问题是我有很多数据,所以我以一个巨大的页面列表结束,我想让它一次只显示10页,然后可能是最后2页,如下所示: 前12 3 4 5 6 7 8 9…24 25下一个 无论如何,我可以更改代码来执行此操作。下面是包含的分页脚本,如果需要,我可以包含脚本的其他部分 <?php //source unknown for logic of showPageNumbers() //modified by drale.com - 1-19-2010 //added qu

我有一个分页脚本,我在下面发布了,问题是我有很多数据,所以我以一个巨大的页面列表结束,我想让它一次只显示10页,然后可能是最后2页,如下所示:

前12 3 4 5 6 7 8 9…24 25下一个

无论如何,我可以更改代码来执行此操作。下面是包含的分页脚本,如果需要,我可以包含脚本的其他部分

<?php
//source unknown for logic of showPageNumbers()
//modified by drale.com - 1-19-2010
//added query_string reproduction and divs
//added showNext() and showPrev()

class Pagination 
{
    function getStartRow($page,$limit)
    {
        $startrow = $page * $limit - ($limit);
        return $startrow;
    }

    function showPageNumbers($totalrows,$page,$limit)
    {
        $query_string = $this->queryString();
        $pagination_links = null;

        /*
         * PAGINATION SCRIPT
         * seperates the list into pages
         */     
        $numofpages = $totalrows / $limit; 
        /* We divide our total amount of rows (for example 102) by the limit (25). This 
           will yield 4.08, which we can round down to 4. In the next few lines, we'll
           create 4 pages, and then check to see if we have extra rows remaining for 
           a 5th page. */

        for ($i = 1; $i <= $numofpages; $i++) {
            /* This for loop will add 1 to $i at the end of each pass until $i 
               is greater than $numofpages (4.08). */       
            if ($i == $page) {
                $pagination_links .= '<div class="page-link"><span>' . $i 
                                   . '</span></div> ';
            } else { 
                $pagination_links .= '<div class="page-link"><a href="?page=' . $i 
                    . '&' . $query_string . '">' . $i . '</a></div> '; 
            }

            /* This if statement will not make the current page number available 
               in link form. It will, however, make all other pages available 
               in link form. */
        }   // This ends the for loop

        if (($totalrows % $limit) != 0) {
        /* The above statement is the key to knowing if there are remainders, and it's 
        all because of the %. In PHP, C++, and other languages, the % is known as a 
        Modulus. It returns the remainder after dividing two numbers. If there is no 
        remainder, it returns zero. In our example, it will return 0.8 */

            if ($i == $page) {
                $pagination_links .= '<div class="page-link"><span>' . $i 
                                   . '</span></div> ';
            } else {
                $pagination_links .= '<div class="page-link"><a href="?page=' . $i 
                    . '&'.$query_string.'">'.$i.'</a></div> ';
            }
            /* This is the exact statement that turns pages into link 
               form that is used above */ 
        } // Ends the if statement 

        return $pagination_links;
    }

    //added by drale.com - 1-19-2010
    function showNext($totalrows,$page,$limit,$text="next &raquo;")
    {
        $next_link = null;
        $numofpages = $totalrows / $limit;

        if ($page < $numofpages) {
            $page++;
            $next_link = '<div class="page-link"><a href="?page=' . $page 
                       . '&'.$query_string.'">' . $text . '</a></div>';
        }

        return $next_link;
    }

    function showPrev($totalrows,$page,$limit,$text="&laquo; prev")
    {
        $next_link = null;
        $numofpages = $totalrows / $limit;

        if ($page > 1) {
            $page--;
            $prev_link = '<div class="page-link"><a href="?page=' . $page 
                . '&' . $query_string . '">'.$text.'</a></div>';
        }

        return $prev_link;
    }

    function queryString()
    {
        //matches up to 10 digits in page number
        $query_string = eregi_replace("page=[0-9]{0,10}&","",$_SERVER['QUERY_STRING']);
        return $query_string;
    }
} 
?>

未测试,但应始终显示列表的第1-3页和最后3页。否则,它将只显示当前页面的前3页和后3页。(当页数大于10页时)

$alwaysShowPages=数组(1,2,3);
//动态添加最后3页
对于($i=3;$i>=0;$i--){
$alwaysShowPages[]=$numofpages-$i;
}
对于($i=1;$i 10&&!in_数组($i,$alwaysShowPages)){
如果($i<$page&($page-$i)>3)
||($i>$page&($i-$page)>3)
) {
$showPageLink=false;
}
}
如果($showPageLink){
如果($i==$page){
$pagination_links.=''.$i.';
}否则{
$pagination_links.='';
}
}
}

我有一个这样做的版本:

1 |23 | 4 | 5 | 6。。。554 | 555 | 556

1 | 2 | 3 | 4 |56。。。554 | 555 | 556

1 | 2 | 3。。。278 |279280。。。554 | 555 | 556

1 | 2 | 3。。。415 |416417。。。554 | 555 | 556

1 | 2 | 3 | 553 |554555 | 556

这个。。。实际上是介于当前页面和下一个(或最后一个)链接组的第一个之间的链接

如果当前页面少于5页,则前6页总是出现

但我使所有参数都是动态的,因此您可以更改变量,如: $end_links=3;//将每端的链接数设置为始终显示 $center_links;//包括当前页面在内的在中间显示“浮动”的链接数

我花了好几个小时才完成这件事,真是令人伤心。哦,好吧


只要经常使用数组,并找出如何向其中添加正确的值。这是简单的数学和逻辑,真的。

恐怕还有更多的东西。例如,当你在第15页(共25页)时,你希望它表现如何,你是应该在开头和结尾都剪几页,还是希望它如何工作?对不起,我忘了这一点,如果你在第15页,从一开始就剪一些,这样它会像:前7 8 9 10 11 12 13 14 15..24 25下一页。谢谢这个解决方案并没有给出他在澄清评论中所要求的,但是我相信这个解决方案从用户的角度来看更有用。谢谢,伙计们,这并不是我想要的,但我认为这样会更好。有没有办法阻止它总是显示前3页,只显示前3页和后3页。感谢使用$alwaysShowPages中的一个是当前页面,只需使用如下内容:对于($i=$CurrentPages-3;$i是的,他是对的,我的方法远非完美,但它至少能快速而肮脏地完成任务。对于这么多页面,一个“对数”页面导航方案会更合适。不过你的答案似乎有太多的链接。我的方法肯定需要一些调整。但我试图实现的结果是模仿最有效的过程,一次猜1到n之间的数字。首先你猜n/2。然后你猜n/2+n/4或n/2-n/4。然后n/2+/-n/4+/-n/8等“蝴蝶”方法。Buttle,看看你的第一行:如何到达p.200?对于“蝴蝶”方法,你至少需要5个链接:假设n页,当前页=p,需要的链接是1,p/2,p,(p+n)/2,n。但这不是用户对分页链接的期望,可能会让大多数人感到困惑,他们希望看到一系列可供选择的链接。我的方法既提供了一个范围,也提供了“蝴蝶”选择的功能(如您所说).Buttle,您当然可以调整我的方法以显示更少的链接。一种方法可能是从10次方更改为2次方(例如)。但最简单的方法可能是“加密”链接只在当前页面周围,而不是在端点附近。我可能会考虑将该选项添加到代码中。注意,当然,当页面总数减少时,我的方法会显示更少的链接。
$alwaysShowPages = array(1, 2, 3);

// dynamically add last 3 pages
for ($i = 3; $i >= 0; $i--) {
    $alwaysShowPages[] = $numofpages - $i;
}

for ($i = 1; $i <= $numofpages; $i++) {
    $showPageLink = true;

    if ($numofpages > 10 && !in_array($i, $alwaysShowPages)) {
        if (($i < $page && ($page - $i) > 3)
            || ($i > $page && ($i - $page) > 3)
        ) {
            $showPageLink = false;
        }
    }

    if ($showPageLink) {
        if ($i == $page) {
            $pagination_links .= '<div class="page-link"><span>'.$i.'</span></div> ';
        } else { 
            $pagination_links .= '<div class="page-link"><a href="?page='.$i.'&'.$query_string.'">'.$i.'</a></div> '; 
        }
    }
}