Вид постраничной навигации

defence

Деклассированный элемент
Вид постраничной навигации

Привет, народ! Сделал постраничную навигацию по каталогу так, чтоб выводила не более 10 ссылок, типа:

<<назад 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 вперед >>

Подскажите, пожалуйста, как сделать, чтобы если пользователь находиться на 10 странице и кликает "вперед", навигация изменялась вот так:

<<назад 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 вперед >>

Вот сам код постраничного вывода, правда кривоват немного:

PHP:
$per_page = 10;	
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;

$res=mysql_query("SELECT count(*) FROM t_links WHERE cid=$sub");
$itms=mysql_fetch_array($res);
$total=$itms[0];
$pages=floor($total/$per_page);
if (($total%$per_page) !=0) {
   $pages++;
}
if (empty($page)) {
   $page=0;
}
if ($page!=0) {
   echo '<A class=pagenav HREF='.$_SERVER['PHP_SELF'].'?cid='.$cid.'&sub='.$sub.'&page='.($page).'>&laquo; назад</A>&nbsp;<font style=color:#564F4F>|</font>&nbsp;';
}
if($pages<10) {
for($i=1;$i<=$pages;$i++) {

  if ($i-1 == $page) {
  echo '<b class=current_page>'.$i.'</b>&nbsp;<font style=color:#564F4F>|</font>&nbsp;';
  } else {
    echo '<a class=pagenav href="'.$_SERVER['PHP_SELF'].'?cid='.$cid.'&sub='.$sub.'&page='.$i.'">'.$i.'</a>&nbsp;<font style=color:#564F4F>|</font>&nbsp;';
  }
    
}
}
else {
for($i=1;$i<=10;$i++) {

  if ($i-1 == $page) {
  echo '<b class=current_page>'.$i.'</b>&nbsp;<font style=color:#564F4F>|</font>&nbsp;';
  } else {
    echo '<a class=pagenav href="'.$_SERVER['PHP_SELF'].'?cid='.$cid.'&sub='.$sub.'&page='.$i.'">'.$i.'</a>&nbsp;<font style=color:#564F4F>|</font>&nbsp;';
  }
    
}
}

if ($pages>10) {

   echo '&nbsp;<A class=pagenav HREF='.$_SERVER['PHP_SELF'].'?cid='.$cid.'&sub='.$sub.'&page='.($page + 2).'>далее &raquo;</A>';
}
Помогите разобраться, пожалуйста...
 

Фанат

oncle terrible
Команда форума
Как интересно.
А ты сам-то не пробовал? Разобраться?
чем отличается вывод страниц с 1 по 10 от с 20 по 20?
Если ты смог написать первое, то второе не должно взывать никаких проблем.
Или хотя бы должны быть какие-то гипотезы - как это сделать
 

defence

Деклассированный элемент
Гипотез много, и много было проб... Если б знал не спрашивал
 

Фанат

oncle terrible
Команда форума
ну давай, раз много, значит парочку тебя не затруднит привести.
Давай начнем вот с чего. ограничим облась поиска.
Давай-ка ты оставишь в своем коде только кусок, который отвечает за вывод самой строчки навигации.
 

defence

Деклассированный элемент
Давай попробуем... Думаю, вот:

PHP:
for($i=1;$i<=10;$i++) {

  if ($i-1 == $page) {
  echo '<b class=current_page>'.$i.'</b>&nbsp;<font style=color:#564F4F>|</font>&nbsp;';
  } else {
    echo '<a class=pagenav href="'.$_SERVER['PHP_SELF'].'?cid='.$cid.'&sub='.$sub.'&page='.$i.'">'.$i.'</a>&nbsp;<font style=color:#564F4F>|</font>&nbsp;';
  }
    
}
}

if ($pages>10) {

   echo '&nbsp;<A class=pagenav HREF='.$_SERVER['PHP_SELF'].'?cid='.$cid.'&sub='.$sub.'&page='.($page + 2).'>далее &raquo;</A>';
}
правильно?
 

defence

Деклассированный элемент
это цикл, который высчитывает 10 страниц
 

defence

Деклассированный элемент
с 1 по 10... Я понимаю, что цикл

for($i=11;$i<=20;$i++) {

будет выводить с 11 по 20, но не понимаю как это сделать, если страниц будет 40, 50, 120...

не писать же для каждого десятка отдельный цикл!
Правильно?
 

Фанат

oncle terrible
Команда форума
правильно.
а как получается цифра 10?
1 - это понятно. А откуда берется цифра 10? или 20 если страница следующая. или 30 - если 3-я?
 

defence

Деклассированный элемент
инкремента $i++ увеличивает 1 на 1 до заданного числа, в данном случае 10
 

Фанат

oncle terrible
Команда форума
нет, я не спрашиваю, что делает $i++
я спросил, почему ты написал 10, а не, скажем, 15 или 3,1416

точнее, меня больше интересует как раз не 10, а 20.
откуда взялось число 20 на второй странице. как ты его получил?
 

defence

Деклассированный элемент
если надо вывести 10 ссылок, я что, по-твоему, с 11 до 20 считать не умею?

ОК! Поставлю вопрос по другому: как обеспечить такой переход в навигации, чтобы не писать каждому десятку ссылок свой цикл? Я просто в PHP еще не совсем...
 

Фанат

oncle terrible
Команда форума
я что, по-твоему, с 11 до 20 считать не умею?
Да, по моему ты считать не умеешь.
и давай выберем что-то одно - или учимся или обижаемся.
пока ты умения считать не продемонстрировал.
Итак.
КАКИМ образом ты получаешь вторую цифру?
Формулу можешь написать?
Я просто в PHP еще не совсем...
вот я и стараюсь тебе помочь.
Мы почти уже закончили.
 

defence

Деклассированный элемент
($page + 2)

Дело в том, что пользователь на 11 страницу переходит, когда кликает "вперед", и на 12, и на 13 и т.д., а навигатор как был, так и остается с 1 по 10...
 
Сверху