Сократить количество страниц в разбивке на страницы

Это может быть довольно глупый вопрос, но я не могу понять ничего, что могло бы помочь мне пойти дальше. Я ищу, чтобы сократить количество NUMBERS в моей навигации по страницам.

Вместо того, чтобы быть похожими: 1, 2, 3, 4, 5, 6, 7, 8

Я хочу, чтобы это было так: 1, 2 … 7, 8

И когда я перехожу к 2 , номер 3 теперь должен быть замечен в группе чисел.

Вот мой код, который отвечает за номера страниц:

<div id="user_nav_bottom"> <?php for($i=1; $i < sizeof($pages)+1; $i++) { $strong = ($_GET['page'] == $i) ? ' dark bold' : ''; echo '<span class="normal' . $strong . '"><a href="imgit_images.php?page=' . $i . '">' . $i . ', </a></span>'; } ?> </div> 

Это измененный фрагмент кода, который я написал для форумов подкачки.

Это результат не совсем так, как вы показали, но должны просто быть настройкой.

 <?php //Set up vars $currentPage = isset($_GET["page"])? $_GET["page"] : 1; $numPages = count($pages); $numPages = 7;//cause I don't have the real var for testing $howMany = 1; ?> <?php if ($numPages > 1): ?> <li>Page <?php echo $currentPage?> of <?php echo $numPages?></li> <?php if ($currentPage > 1): ?> <li><a href="imgit_images.php?page=1">First</a></li> <li><a href="imgit_images.php?page=<?php echo $currentPage-1?>">&lt;</a></li> <?php endif; ?> <?php if ($currentPage > $howMany + 1): ?> <li>...</li> <?php endif; ?> <?php for ($pageIndex = $currentPage - $howMany; $pageIndex <= $currentPage + $howMany; $pageIndex++): ?> <?php if ($pageIndex >= 1 && $pageIndex <= $numPages): ?> <li> <?php if ($pageIndex == $currentPage): ?> <u> <?php endif; ?> <a href="imgit_images.php?page=<?php echo $pageIndex?>"><?php echo $pageIndex?></a> <?php if ($pageIndex == $currentPage): ?> </u> <?php endif; ?> </li> <?php endif; ?> <?php endfor; ?> <?php if ($currentPage < $numPages - $howMany): ?> <li>...</li> <?php endif; ?> <?php if ($currentPage < $numPages): ?> <li><a href="imgit_images.php?page=<?php echo $currentPage+1?>">&gt;</a></li> <li><a href="imgit_images.php?page=-1">Last</a></li> <?php endif; ?> <?php endif; ?> 

Проверьте это: https://codereview.stackexchange.com/a/10292 . Это решение должно решить вашу проблему. Я думаю, что это очень хороший подход.

На этом показаны две ссылки до и две после текущей запрашиваемой ссылки:

 <div id="user_nav_bottom"> <?php $current = $_GET['page']; $last = count($pages)+1; $curr0 = $current-2; $curr1 = $current+2; if ($curr0<=1) { $curr0 = 1; $curr1 = $last>5? 5 : $last; } if ($curr1>=$last) { $curr0 = $last-4 < 1 ? 1 : $last-4; $curr1 = $last; } // now print all links: echo '<a href="imgit_images.php?page=1">&#171;</a> '; for ($i=$curr0; $i<=$curr1; $i++) { $style = ($i==$current)? 'font-weight:bold':''; echo ' <a href="imgit_images.php?page='.$i.'" style="'.$style.'">'.$i.'</a> '; } echo '<a href="imgit_images.php?page='.$last.'">&#187;</a> '; ?> </div> 

Здесь показаны такие ссылки: «13 14 15 16 17»
Imho не так сложно добавить также первые пять и последние пять ссылок, добавив соответствующие условия.

Скрипт тестирования здесь

То, что вы можете сделать, это использовать «логарифмический» метод разбивки на страницы, описанный в моем ответе:

Как выполнять навигацию по страницам для многих, многих страниц? Логарифмическая навигация по страницам

Если вы установите LINKS_PER_STEP на низкое значение, например 2 или 3, это приведет к очень компактному выходу.