2016-04-23 136 views
0

我试图使一个PHP分页这样的:PHP分页循环问题

$count = $this->dataBaseFunctions->countItems(); 
$resultperPage = 10; 
$offset = 0;  
$adjacents = 3; 
$totalPages = ceil(intval($count)/$resultperPage); 


if (isset($_GET['offset'])) { 
    $offset = trim($_GET['offset']); 
} 

$j = $adjacents; 
while ($j > 0) { 
    if (($offset/10) - 1 > 0) { 
    echo '<a href="anypage/' . ($offset - 10 - ($j * 10)) . '" class="pagelink">' . ($offset - 10 - ($j * 10)) . '</a> ';   
    } 
    $j--; 
} 

/*for ($j = $adjacents; $j > 0; $j--) { 
    echo '<a href="anypage/' . ($offset - 10 - ($j * 10)) . '" class="pagelink">' . ($offset - 10 - ($j * 10)) . '</a> '; 
}*/ 

echo '<a href="anypage/' . ($offset - 10) . '" class="pagelink current">[' . ($offset - 10) . '] </a> '; 

for ($j = 1; $j < ($adjacents + 1); $j++) { 
    echo '<a href="anypage/' . ($offset - 10 + ($j * 10)) . '" class="pagelink">' . ($offset - 10 + ($j * 10)) . '</a> '; 
} 

结果应该是这样的(括号=当前clicket页): [0] 1 2 3

当我点击“3”应该看起来像这样(到目前为止): 0 1 2 [3] 4 5 6

但是当我点击“1”时,结果如下所示: -2 -1 0 [ 1] 2 3 4

“0”不是问题,我只是'回应'它进行调试。 我知道我不设置正确的条件,不显示低于1的页面,但我不知道如何使它正确。好像我的眼睛上有西红柿......回声仅用于测试 - 稍后我将整个分页链接保存到一个变量中,以将其分配到页面的底部。它有一些你在这里看到的调试代码,但它显示了我试图做的事情。请让我知道,如果我可以改善这个问题,或者是否有缺失的信息:“为什么你($ offset/10)-1> 0”;-)

后来我需要做同样的东西在JS中,但我想我可以管理,当我知道我在PHP版本中做了什么错误。

*也许这是一个坏主意我想在那里做什么?

+0

什么是'$ adjacents'好? – Reto

+0

$ adjacents是当前页面左侧和右侧的计数。所以如果我点击例如“5”,左边显示2 3 4,右边6 7 8像2 3 4 [5] 6 7 8. 1和9没有显示。 $ adjacents = 3,一次显示7页的范围 –

回答

1

这一个应该做的伎俩:

现在包括$邻道

$count = $this->dataBaseFunctions->countItems(); 
$resultperPage = 10; 
$offset = 0; 
$adjacents = 3; 
$totalPages = ceil(intval($count)/$resultperPage); 

if (isset($_GET['offset'])) { 
    $offset = trim($_GET['offset']); 
}  
$start = ($offset-$adjacents) > 0 ? ($offset-$adjacents) : 0; 
$end = ($offset+$adjacents) < $totalPages ? ($offset+$adjacents) : $totalPages; 

$pager = ""; 
for ($i = 0; $i < $totalPages; $i++) { 
    if ($i >= $start && $i <= $end) { 
     $pager .= $offset != $i ? '<a href="anypage/' . $i . '" class="pagelink">' . $i . '</a> ' : "[$i] "; 
    } 
} 
echo $pager; 
+0

谢谢!我会试试看!关于$邻接呢? –

+0

您的代码看起来像是一次显示所有页面,但我只想一次显示7个页面。 –

+0

我用$ adjacents更新了我的答案 - 现在是否适合你? – Reto