Пытаюсь упросить пагинацию, не знаю, удобен ли будет такой вариант, когда при переход, сразу на третью все номера страниц увеличиваются на 1 вперед. Весь код. Код (PHP): <?php define('HOST', 'localhost'); define('USER', 'root'); define('PASSWORD', '123'); define('NAME_BD', 'new'); $perpage = 5; mysql_connect(HOST, USER, PASSWORD) or die('error! No Connection!'); mysql_query("SET NAMES utf8"); mysql_select_db(NAME_BD) or die('error! Check BD connection'); if (empty($_GET['page']) || ($_GET['page'] <= 0)) { $page = 1; } else { $page = (int) $_GET['page']; } $count = mysql_numrows(mysql_query('select * from news')) or die(' Nothing happened'); $pages_count = ceil($count / $perpage); if ($page > $pages_count) $page = $pages_count; $start_pos = ($page - 1) * $perpage; $result = mysql_query('select * from news order by id desc limit '.$start_pos.', '.$perpage ) or die('error!'); while ($row = mysql_fetch_array($result)) { ?> [url="new.php?myhead=<?=$row['id']?>"]<?=$row['head']?>[/url] <? } mysql_free_result($result); ?> [url="pag.php?page=1"]<< [/url] [url="pag.php?page=<?=$page-4?>"] <[/url] <? $page_plus=$page-1; for ($i = 1; $i < $perpage; ++$i) { ?> [url="pag.php?page=<?=++$page_plus?>"]<?=$page_plus?>[/url] <? } ?> [url="pag.php?page=<?=$page+4?>"]> [/url] [url="pag.php?page=<?=$pages_count?>"] >>[/url] Строчки с подключением к БД не стал вырезать, если кто-то захочет проверить и что-нибудь дополнить. Это не какой-то конкретный вопрос, так, мысли к размышлению, так сказать.
Вроде бы код наглядней и будто побыстрее, но получается, что оптимальное число для вывода 5, т.е. скрипт несколько теряет в универсальности. Добавил, чтобы при щелчке на крайнюю левую был переход на шаг назад. Код (Text): <?require_once 'header.html';?> <?php if (empty($_GET['page']) || ($_GET['page'] <= 0)) { $page = 1; } else { $page = (int) $_GET['page']; } $count = mysql_numrows(mysql_query('select * from news')) or die(' Nothing happened'); $pages_count = ceil($count / $perpage); if ($page > $pages_count) $page = $pages_count; $start_pos = ($page - 1) * $perpage; $result = mysql_query('select * from news order by id desc limit '.$start_pos.', '.$perpage ) or die('error!'); while ($row = mysql_fetch_array($result)) { ?> <a href="new.php?myhead=<?=$row['id']?>"><?=$row['head']?></a> <? } mysql_free_result($result); ?> <div class="footer"> <a href="pag.php?page=1"> first </a> <a href="pag.php?page=<?=$page-$perpage?>"> <</a> <? $page_plus=$page-1; for ($i = 1; $i < $perpage; ++$i) { if ($i==1 && $page > 1) { echo "<a href=\"pag.php?page=$page_plus\">$page_plus </a>"; } if ($page_plus==$pages_count) { break; } ?> <a href="pag.php?page=<?=$page_plus=$page_plus+1?>"><?=$page_plus?></a> <? } ?> <a href="pag.php?page=<?=$page+$perpage?>">> </a> <a href="pag.php?page=<?=$pages_count?>"> last </a> </div>