Вы можете заменить первый цикл
while ( $start < 1 ) {
$start++;
$end++;
}
на
if($start < 1)
{
$end += (1 - $start);
$start = 1;
}
Нечто подобное можно сделать для второго цикла, но наоборот:
if ( $end > $totalPages ) {
$start -= ($end - $totalPages);
$end = $totalPages;
}
Редактировать : Гораздо проще просто обрезать номера страниц, которые находятся за пределами, замените пример кода следующим:
$start = $pageNumber - $pagesToShow;
$end = $pageNumber + $pagesToShow;
if($start < 1)
$start = 1;
if($end > $totalPages)
$end = $totalPages;
$pagesToShow
- максимальное количествостраницы, отображаемые до и после текущей страницы (если не вне границ)