Есть такой код для постраничного вывода: Код (Text): $p = 1; do { if ($page == $p) { echo "<a href=cat.php?id_categ=$id_categ&page=$p><b><font size=4>$p</font></b></a>\n"; } else { echo "<a href=cat.php?id_categ=$id_categ&page=$p>$p</a>\n"; } $p++; } while ($p <= $total); где // $page - это $_GET['page'] // $total - общее число записей в БД Чтобы сделать постраничный вывод я делю общее количество записей в БД на желаемое количество записей на одной странице и получаю число страниц. Далее с помощью формулы и LIMIT делаю постраничный вывод на страницы сайта. Всё это работает нормально. Но скоро на сайте будет более 100 страниц, поэтому надо как-то ограничить число страниц на одной странице (сорри за тафтологию), т.е. сначала выводятся 5 страниц, затем кликая на ">>" выводятся следующие 5 страниц и так далее, пока не закончатся все страницы на сайте. Как такое сделать? Более наглядно это видно на скриншоте: http://mir44.ru/tmp/page.gif
А если головой подумать, а? Да-да, я предлагаю вам сделать феноменальнейшую вещь совершить — ПОДУМАТЬ. Это делается две минуты и я могу вам написать код и выложить, но я этого делать не буду, потому что задача самая, что ни на есть тривиальная и очень простая, и пока не решите её, программистом вас назвать нельзя. У вас действительно хватает знаний для того, чтобы это сделать. Остается только подумать.
разбирайся PHP: <? function Pager($page,$tpl,$page_block,$page_num,$allnum) { $res=false; $page=(int)$page; if($page<=0)$page=1; $max=ceil($allnum/$page_num); if($page>$max)$page=$max; $start=$page-2; if($start>$max-$page_block+1)$start=$max-$page_block+1; if($start<=0) $start=1; $end=$start+$page_block-1; if($end>$max) $end=$max; if($page>=5)$res.="<a href='".str_replace("{i}",1,$tpl)."'>[1]</a>"; if($page>5) $res.="<a href='".str_replace("{i}",2,$tpl)."'>[2]</a>"; if($page>=4)$res.="..."; for($i=$start;$i<=$end;$i++){ if($i==$page)$res.="<b>[$i]</b>"; else $res.="<a href='".str_replace("{i}",$i,$tpl)."'>[$i]</a>"; } if($end!==$max){ if($end<$max)$res.="..."; if($end<$max-2){ $res.="<a href='".str_replace("{i}",($max-1),$tpl)."'>[".($max-1)."]</a>"; } if($end<$max-1){ $res.="<a href='".str_replace("{i}",$max,$tpl)."'>[".$max."]</a>"; } } return $res; } print Pager($_GET['page'],$_SERVER['PHP_SELF']."?page={i}",6,10,999); ?>
пока взял постраничную навигацию с сайта www.php.su - работает, но это все фигня - надо выводить навигацию "пачками" по 5 страниц и не выводит несколько ближайших страниц. код такой: Код (Text): // Проверяем нужны ли стрелки назад if ($page != 1) $pervpage = "<a href=cat.php?id_categ=$id_categ&page=1>Первая</a>"; // Проверяем нужны ли стрелки вперед if ($page != $total) $nextpage = "<a href=cat.php?id_categ=$id_categ&page=$total>Последняя</a>"; // Находим две ближайшие страницы с обоих краев, если они есть if($page - 5 > 0) $page5left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 5) .">". ($page - 5) ."</a>\n"; if($page - 4 > 0) $page4left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 4) .">". ($page - 4) ."</a>\n"; if($page - 3 > 0) $page3left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 3) .">". ($page - 3) ."</a>\n"; if($page - 2 > 0) $page2left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 2) .">". ($page - 2) ."</a>\n"; if($page - 1 > 0) $page1left = "<a href=cat.php?id_categ=$id_categ&page=". ($page - 1) .">". ($page - 1) ."</a>\n"; if($page + 5 <= $total) $page5right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 5) .">". ($page + 5) ."</a>\n"; if($page + 4 <= $total) $page4right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 4) .">". ($page + 4) ."</a>\n"; if($page + 3 <= $total) $page3right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 3) .">". ($page + 3) ."</a>\n"; if($page + 2 <= $total) $page2right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 2) .">". ($page + 2) ."</a>\n"; if($page + 1 <= $total) $page1right = "<a href=cat.php?id_categ=$id_categ&page=". ($page + 1) .">". ($page + 1) ."</a>\n"; // Вывод меню echo "$pervpage $page5left $page4left $page3left $page2left $page1left <b><font size=4>$page</font></b> $page1right $page2right $page3right $page4right $page5right $nextpage"; как переделать его так, чтобы при нажатии на ">>" появлялся бы список из следующей 20-ки страниц, и так далее - просто и понятно для юзера.
если это первая страница "<- назад" нам не нужно, если это 2-я и по n страницу "<- назад" нам нужно, если страниц больше чем 1 и это не последняя страница то нам нужно "вперед ->" samb100 типа минимальный алгоритм той фишки которая тебе нужна