2016-04-23 3 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

Это следует сделать трюк:

Теперь в том числе $ adjacents

$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