PHP分页问题

PHP分页问题,php,Php,我对一个项目的PHP分页有问题 它几乎可以工作,但似乎无法正确显示数字 我只想在所选页面之后再显示6个页码,在所选页面之前再显示一个页码; (如果您在第1页上,请在之后显示7) 例如: 如果在第1页:1/2/3/4/5/6/7/8 如果在第2页:1/2/3/4/5/6/7/8 如果在第5页:4/5/6/7/8/9/10/11 如果在第10页:9/10/11/12/13/14/15/16 这是我目前的代码… if($page == ceil($NumOfPages) && $pag

我对一个项目的PHP分页有问题

它几乎可以工作,但似乎无法正确显示数字

我只想在所选页面之后再显示6个页码,在所选页面之前再显示一个页码; (如果您在第1页上,请在之后显示7)

例如:

如果在第1页:1/2/3/4/5/6/7/8

如果在第2页:1/2/3/4/5/6/7/8

如果在第5页:4/5/6/7/8/9/10/11

如果在第10页:9/10/11/12/13/14/15/16

这是我目前的代码…

if($page == ceil($NumOfPages) && $page != 1){
    for($i = 1; $i <= ceil($NumOfPages)-1; $i++){
    if($i > 0){
        echo "<a href=\"/{$i}\">{$i}</a>";
    }
    }
}
if ($page == ceil($NumOfPages) ) {
    $startPage = $page;
}else{
    $startPage = 1;
}
for ($i = $startPage; $i <= $page+6; $i++){
        if ($i <= ceil($NumOfPages)){
            if($i == $page) {
                echo "<a href='/page/$i/' title='View movies page $i' id='pagelisel'>$i</a> ";
            }else{
                echo "<a href='/page/$i/' title='View movies page $i' id='pageli'>$i</a> ";
            }
        }
}
if($page==ceil($numopages)&&$page!=1){
对于($i=1;$i 0){
回声“;
}
}
}
如果($page==ceil($NumOfPages)){
$startPage=$page;
}否则{
$startPage=1;
}
对于($i=$startPage;$i我假设(部分是为了我自己…;):

  • $page
    是所选页面
  • $startPage
    是要显示的第一个页码
  • $numPages
    已经
    ceil
    -ed
首先,您需要找到
$startPage
。取决于
$page
是否为第一个(即值为1,另一个假设)。您的支票有点不符,因为它会检查支票是否与最后一页相等

if($page == 1) {
    $startPage = 1;
} else {
    $startPage = $page - 1;
}
然后,您需要找出要打印的最后一个页码(
$lastPage
)。因此,检查
$startPage
是否接近末尾,并相应地设置~$lastPage`:

if($startPage + 7 > $numPages) {
    $endPage = $numPages;
} else {
    $endPage = $startPage + 7;
}

最后,使用您的
进行
-循环,这似乎还可以,但可以从
$startPage
循环到
$endPage

以下是一种也适用于您的替代方法:

$pageCurrent = $page;
$pagePrevious = $pageCurrent-1;
$pageClass = '';
$pageStart = 1;
$pageEnd = $pageCurrent+6;
$pageMax = ceil($NumOfPages);

if($pageCurrent==1){
    echo "<a href=\"/page/1\" class=\"selected\">1</a>";
}else{
    echo "<a href=\"/page/$pagePrevious\">$pagePrevious</a>";
}

for($i = $pageStart; $i <= $pageEnd; $i++){
    if($i <= $pageEnd){
        if($i == 1 && $pageCurrent != 1){
            $pageClass = 'selected';
        }else{
            $pageClass = '';
        }
        echo "<a href=\"/page/$i\" title=\"View movies page $i\" class=\"$pageClass\">$i</a>";
    }
}
$pageCurrent=$page;
$pagePrevious=$pageCurrent-1;
$pageClass='';
$pageStart=1;
$pageEnd=$pageCurrent+6;
$pageMax=ceil($numopages);
如果($pageCurrent==1){
回声“;
}否则{
回声“;
}

对于($i=$pageStart;$i为什么你在$numopages上调用'ceil',它不应该总是一个整数吗?(我还在读你的代码,只是想问一下)@TigerTrussell:可能是因为像
$numopages=$posts/$posterpage
这样的东西,你是个天才:)总是一个字符把整个事情搞砸了,我可以从这里开始。谢谢维格!我误解了你的代码,我的解释不正确。我会更新我的答案…;)在您的
for
-循环中,选择一个数字后,也会选择以下所有数字。